بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
ارور فورس کلوز
سلام دوستان خسته نباشید
داخل یه اکتیویتی اطلاعاتی دارم که از جیسون دریافت میکنه اما اگه به نت وصل نباشیم و اکتیویتی رو باز کنم ارور فورس کلوز میده و برنامه بسته میشه . چجوری میتونم کدی بدم که اگه نت وصل نبود و اکتیوی باز شد صفحه خالی نشون بده و با یه toast پیام بده که اینترنت وصل نیست . کلیه کدها تو خود انجمن و گوگل ( با شرطی کردنش و ... )هم امتحان کردم اما بازم مشکل دارم .
ممنون میشم راهنمایی کنید . اینم کدهای اکتیویتیم >>>
package com.example.me;
import java.io.UnsupportedEncodingException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class Tamozeshi extends ListActivity {
//URL to get JSON Array
private static String url;
//JSON Node Names
private static final String json_name = "hassan";
private static final String json_node_name_1 = "id";
private static final String json_node_name_2 = "name";
private static final String json_node_name_3 = "city";
JSONArray hassan = null;
public String app_id_string;
public String[] json_string_1_all;
public String[] json_string_2_all;
public String[] json_string_3_all;
publicintjson_length;
public ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tamozeshi);
url = "http://site.com/pro/json.html";
new JSONParse().execute();
}
public class JSONParse extends AsyncTask<String, String, JSONObject> {
public ProgressDialog pDialog;
@Override
public void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Tamozeshi.this);
pDialog.setMessage("در حال دریافت اطلاعات... \n لطفا کمی صبر کنید...");
pDialog.setIndeterminate(true);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
public JSONObject doInBackground(String... args) {
JSONParser jParser = new JSONParser();
// Getting JSON from URL
JSONObject json = jParser.getJSONFromUrl(url);
return json;
}
@Override
public void onPostExecute(JSONObject json) {
pDialog.dismiss();
try {
// hassan
hassan = json.getJSONArray(json_name);
// build String
json_length = hassan.length();
json_string_1_all = new String [hassan.length()];
json_string_2_all = new String [hassan.length()];
json_string_3_all = new String [hassan.length()];
for(int i = 0; i < hassan.length(); i++){
JSONObject c = hassan.getJSONObject(i);
// Storing JSON item in a Variable --> with UTF-8 for persian words
json_string_1_all[i] = new String(c.getString(json_node_name_1).getBytes("ISO-8859-1"), "UTF-8");
json_string_2_all[i] = new String(c.getString(json_node_name_2).getBytes("ISO-8859-1"), "UTF-8");
json_string_3_all[i] = new String(c.getString(json_node_name_3).getBytes("ISO-8859-1"), "UTF-8");
}
// show data in ListView
setListAdapter(new MyAdapter(Tamozeshi.this,
R.layout.list_layout,
R.id.textView1,
json_string_1_all));
lv = getListView();
} catch (JSONException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
}
}
private class MyAdapter extends ArrayAdapter{
public MyAdapter(Context context, intresource, inttextViewResourceId,
String[] strings) {
super(context, resource, textViewResourceId, strings);
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.list_item, parent, false);
String id = json_string_1_all[position];
TextView tv_1 = (TextView) row.findViewById(R.id.textView1);
tv_1.setText(id);
String name = json_string_2_all[position];
TextView tv_2 = (TextView) row.findViewById(R.id.textView2);
tv_2.setText(name);
String city = json_string_3_all[position];
TextView tv_3 = (TextView) row.findViewById(R.id.textView3);
tv_3.setText(city);
returnrow;
}
}
}
+1
0
برای handle کردن برنامه تون از try -catch استفاده کنید.کدهای اصلیتون رو در بلوک try قرار بدید و کارهایی که در صورت دریافت نشدن اطلاعات به هردلیلی میخواید انجام بشه در بلوک catch ...(مثلا همون نمایش پیغام toast رو میتونید در catch بنویسید... (10 سال پیش)
برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال
احمد
10 سال پیش
0
0
این را امتحان کن:
ConnectivityManager conMan; State mobile, wifi;
btnLogin.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { checkconnect(); } });
@SuppressWarnings("deprecation") private void checkconnect() { try { conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) .getState(); wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI) .getState(); if (mobile == NetworkInfo.State.CONNECTED | mobile == NetworkInfo.State.CONNECTING) { get_users(); } else if (wifi == NetworkInfo.State.CONNECTED | wifi == NetworkInfo.State.CONNECTING) { get_users(); } else { G.selectMode = "offline"; toast.Redtoast(ActivityLogin.this, "Wifi or Gprs Disable"); } } catch (Exception e) { } }
@SuppressLint("ShowToast") private void get_users() { try { G.userList.clear(); String u, p; u = edtusername_login.getText().toString(); p = edtpassword_login.getText().toString(); LoginUser loginUser = new LoginUser(); loginUser.GetUserData(ActivityLogin.this, ActivityLogin.this, u, p, user_error, loginguser); } catch (Exception e) { Log.e(G.APP_LOG, "login error"); e.printStackTrace(); } }
public class LoginUser { private ProgressDialog pDialog; private final String TAG_SUCCESS = "success"; private String url_user = your_url; static JSONParser jParser = new JSONParser(); String user, pass, user_error, loginguser; private Context context; Activity activity; ShowToast toast; public void GetUserData(Activity activity2, Context context2, String user, String pass, String user_error, String loginguser) { this.user = user; this.activity = activity2; this.pass = pass; this.loginguser = loginguser; this.user_error = user_error; this.context = context2; try { GetUserFromWeb upd = new GetUserFromWeb(); upd.execute(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void GetUserData() { try { GetUserFromWeb upd = new GetUserFromWeb(); upd.execute(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } class GetUserFromWeb extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { super.onPreExecute(); try { toast = new ShowToast(); pDialog = new ProgressDialog(G.CurrentActivity); pDialog.setMessage(loginguser); pDialog.setIndeterminate(false); pDialog.setCancelable(false); try { pDialog.show(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } private void Checkdata() { List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("uName", user)); params.add(new BasicNameValuePair("uPass", pass)); JSONObject json = jParser.makeHttpRequest(url_user, "POST", params); try { if (json != null) { int success = json.getInt(TAG_SUCCESS); if (success == 1) { UserStruct userStruct = new UserStruct(); String GCode = json.getString("GCode"); userStruct.setUs_GCode(GCode); String GAccCode = json.getString("GAccCode"); userStruct.setUs_GAccCode(GAccCode); G.userList.add(userStruct); ((ActivityLogin) activity).checkuserpass(); pDialog.dismiss(); } } } catch (JSONException e) { toast.Redtoast((Activity) context, user_error); pDialog.dismiss(); } } @Override protected String doInBackground(String... args) { Checkdata(); return null; } @Override protected void onPostExecute(String file_url) { pDialog.dismiss(); }; } }
ممنون ولی به کارم نیومد . همون کد بالا که خودم قرار دادم هیچ مشکلی نداره و به خوبی کار میکنه . تنها مشکل اینه که اگه نت گوشی وصل نباشه و وارد اکتیویتی بشیم برنامه فورس کلوز میده . فکر کنم تنهابا اضافه کردن چندتا کد که اگه نت گوشی وصل نبود یه پیغام toast بده که نت وصل نیست اگرم وصل بود اکتیویتی رو باز کنه با اطلاعاتش مشکل حل شه .
ممنون میشم اساتید راهنمایی کنن (10 سال پیش)
پاسخ به سوال
بهروز
10 سال پیش
+3
0
اینکه بخواید چک کنید اگه اینترنت وصل بود عملیات دانلود شروع شه .در غیر اینصورت یه پیغام.
if(isNetworkConnected())
{
newJSONParse().execute();
}else
Toast.makeText(getBaseContext(),getResources().getString(R.string.warning),Toast.LENGTH_LONG).show();
}
تابع چک کردن اینترنت هم :
private boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni == null) {
// There are no active networks.
return false;
} else
return true;
}
شما فقط بعد از روشن کردن اینترنت قابلیتی بزارید که صفحه reload بشه.چون بعد از روشن کردن اینترنت .باید صفحه دوباره بارگزاری بشه.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .