-1
私はhttpurlconnectionを使用して非同期タスクを呼び出そうとしています。私はJsonデータをカスタムリストビューを作成しているアダプタに供給したい。しかし、私のアプリはクラッシュしています。私はこのスタックオーバーフローについて議論された多くの異なるコードを試しましたが、私はそれを理解できません。私はそれが間違っているコードか一般的に私のロジックであるかどうかはわかりません。私はAndroidの開発に関しては素人ですので、本当に助けに感謝します。HttpUrlConnectionを使用したAndroid Asyncタスク
これはasync関数が宣言されているクラスであり、フラグメントの一部です。
public class Movies extends Fragment {
ListView List;
ListAdapter ladapter;
ArrayList<info> data;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_movies, container, false);
movielist mv=new movielist();
Toast.makeText(getContext(), "calling", Toast.LENGTH_LONG).show();
mv.execute("myurl");
return view;
}
public class movielist extends AsyncTask<String, Void, String> {
HttpURLConnection urlConnection;
@Override
protected String doInBackground(String... args) {
String result = null;
try {
URL myurl=new URL(args[0]);
HttpURLConnection urlConnection = (HttpURLConnection) myurl
.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoInput(true);
urlConnection.connect();
InputStream is=urlConnection.getInputStream();
if (is != null) {
StringBuilder sb = new StringBuilder();
String line;
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(is));
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
} finally {
is.close();
}
result = sb.toString();
}
}catch (Exception e){
result=null;
}
return result;
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(getContext(), "In post ex", Toast.LENGTH_SHORT).show();
try {
String data1 = result;
JSONObject jobj = new JSONObject(data1);
JSONArray jArray = jobj.getJSONArray("actors");
for (int i = 0; i < jArray.length(); i++) {
info information = new info();
JSONObject jrealobj = jArray.getJSONObject(i);
information.setTitle(jrealobj.getString("name"));
information.setPoster_path(jrealobj.getString("image"));
data.add(information);
}
} catch (JSONException e) {Toast.makeText(getContext(), "Not working", Toast.LENGTH_SHORT).show();
}
try {
ladapter = new Listadapter(getContext(), data);
List.setAdapter(ladapter);}catch (NullPointerException e){Toast.makeText(getContext(), "Null", Toast.LENGTH_SHORT).show();}
}
}
}
「私のアプリはクラッシュしています。」例外スタックトレースを表示していません。 –
[不幸にもMyAppが停止しました。どうすればこの問題を解決できますか?](https://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-this) –
(1)logcat、 2) 'doInBackground'の内部では、例外を飲み込むことができます。代わりに、アプリがクラッシュして見えるようにすることができます。より良いエラー処理を追加できるようになるまで、 'run newException(e)'を投げてランタイム例外にラップすることができます。 (3) 'result'がnullの場合、' onPostExecute'はNullPointerExceptionでクラッシュします。 – orip