آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

 ارتباط با سرور و گرفتن اطلاعات به وسیله جیسون 

mosafer  10 سال پیش  10 سال پیش
+1 0

با سلام

من از پروژه Notes استاد استفاده کردم. میخوام برای یه صفحه خبر هم تیتر خبر هم عکس خبر هم متن اصلی خبر رو بگیرم.

توی لاگ اطلاعات رو از وب میگیرم ولی برنامم همون موقع هنگ میکنه!! وقتی چک کردم میبینم به Adapter خطا میگیره. بعد هم فهمیدم که متد getView در کلاس AdapterNote  اتفاق نمیفنه و لیست ویو رو پر نمیکنه.

این کد کلاس customAdapter منه :

 public class CustomListAdapter extends ArrayAdapter<News>{

public CustomListAdapter(ArrayList<News> array) {
super(G.context, R.layout.layout_row, array);

}

private static class ViewHolder {

public ViewGroup layoutNews;
public TextView txtTitle;
public TextView txtDescription;
public ImageView imgNews;


public ViewHolder(View view) {
txtTitle = (TextView) view.findViewById(R.id.textViewTitr);
txtDescription = (TextView) view.findViewById(R.id.textViewMatn);
layoutNews = (ViewGroup) view.findViewById(R.id.layoutNews);
imgNews = (ImageView) view.findViewById(R.id.imageViewNews);
}


public void fill(final ArrayAdapter<News> adapter, final News item, final int position) {

txtTitle.setText(item.NewsTitr);
txtDescription.setText(item.NewsText);
Uri image =Uri.parse(item.NewsLogo);
imgNews.setImageURI(image);

final News id = new News();
layoutNews.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Intent intent = new Intent(G.currentActivity, ActivityNews.class);
intent.putExtra("id_news", id.NewsId);
G.currentActivity.startActivity(intent);
}
});

}
}



@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub

ViewHolder holder;

News item = getItem(position);
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.layout_row, parent, false);

holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.fill(this, item, position);
return convertView;
}

 اینم کد وب سرویسم :

 public class WebService {

public static void insert(ArrayList<NameValuePair> params) {
Connect.readUrl("http://192.168.0.1/");
}


public static void update(ArrayList<NameValuePair> params) {
Connect.readUrl("http://192.168.0.1/");
}


public static void remove(ArrayList<NameValuePair> params) {
Connect.readUrl("http://192.168.0.1/");
}


public static void read() {
String result = Connect.readUrl("http://192.168.0.1/");
if (result != null) {
try {
G.tasks.clear();
JSONArray tasks = new JSONArray(result);
for (int i = 0; i < tasks.length(); i++) {
JSONObject object = tasks.getJSONObject(i);
News task = new News();
task.NewsId = Integer.parseInt(object.getString("NewsId"));
task.NewsTitr = object.getString("NewsTitle");
task.NewsText = object.getString("NewsText");
task.NewsLogo = object.getString("NewsPic");

Log.i("id : ", task.NewsTitr );

G.tasks.add(task);
}
}
catch (JSONException e) {
e.printStackTrace();
}
}
}
}

ا

اینم کد کلاس اصلیم :

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.layout_news, null);



// ArrayList<String> adapter = new CustomListAdapter(getActivity(), image_id, Titr, Main);


// ArrayAdapter<News> arrayAdapter = new ArrayAdapter<News>(G.currentActivity, R.layout.layout_row, G.tasks);
listView = (ListView) layout.findViewById(R.id.listView);
adapter = new CustomListAdapter(G.tasks);


listView.setAdapter(adapter);
WebService.read();
adapter.notifyDataSetChanged();

listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View selecteRow, int arg2, long arg3) {
// TODO Auto-generated method stub

String text = ((TextView) selecteRow).getText().toString();

Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show();

startActivity(new Intent(getActivity(),ActivityNews.class));

}

});

// Restore previous state (including selected item index and scroll position)
if(state != null) {
Log.d("save : ", "trying to restore listview state..");
listView.onRestoreInstanceState(state);
}



// new GetContacts().execute();

return layout;
}

 

0 0
ینی کسی نیست ببینه مشکل کد من چیه!؟؟ آخه خیلی نیاز دارم. ممنون میشم راهنماییم کنید. (10 سال پیش)
0 0
این خطام برطرف شد ایراد کارم این بود که کلاس G رو در منیفستم تعریف نکرده بودم حالا یه خطای جدید دارم. خطای networkonmainthreadexception رو میده که فکر میکنم مربوط به اتصاله! پرمیژن اینترنت رو هم در منیفست تعریف کردم.نمیدونم دقیقا مشکل از کجاست!!! (10 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
mosafer  10 سال پیش
+1 0

کسی که نیست جواب بده ولی جوری که توی انجمن سرچ کردم و تا حدودی متوجه شدم باید از ترد استفاده کنم حالا سوالم اینجاست که کجای کدم باید از ترد استفاده کنم توی آموزش استاد که اشاره ای نشد.

باید کدهای اتصال به سرورم رو درون ترد بذارم یا کدهای دریافت جیسونم رو..

کسی هست راهنمایی کنه !؟

 Thread thread =newThread(newRunnable(){

@Override
publicvoid run(){
while(true){
try{
Thread.sleep(3000);

//دستورات مورد نظر
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
});
thread.start();

خب این تردیه که میخوام استفاده کنم.

ممنون میشم خیلی برام مهمه!

یه جایی هم این کد رو گفتن که همین مشکل من رو داشت ولی بازم من موندم توش کسی هست این کد رو هم توضیح بده؟!

 
publicclassHttpClientActivityextendsActivity{
/** Called when the activity is first created. */
@Override
publicvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
 
// StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
// .permitAll().build();
// StrictMode.setThreadPolicy(policy);
 
// connect();
 
newConnection().execute();
 
}
 
privateclassConnectionextendsAsyncTask{
 
@Override
protectedObjectdoInBackground(Object...arg0){
connect();
returnnull;
}
 
}
 
privatevoidconnect(){
try{
DefaultHttpClient client=newDefaultHttpClient();
HttpGet request=newHttpGet("http://www.google.com");
HttpResponse response=client.execute(request);
}catch(ClientProtocolExceptione){
Log.d("HTTPCLIENT",e.getLocalizedMessage());
}catch(IOExceptione){
Log.d("HTTPCLIENT",e.getLocalizedMessage());
}
}
 
}
 




پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .