問題があります。アクティビティの中に私の非同期クラスがあります。 。私はonPostMethodに何も返しません。これをより一般的にするために、Factoryのようなデザインパターンを使用する必要がありますか?私のポイントは何ですか。私はデータでjsonを取得した後。私は "スピナー"を終了する必要がありますが、このProcccesDialogでは決してdoInBackGroundメソッドからデータを受け取ることはないため、終了しません。私はあなたのコードに問題があることを推測する任意のadvaiceAndroid AsyncTask Volley
private class ProgressTask extends AsyncTask <String, Void ,String>k{
private ProgressDialog dialog = new ProgressDialog(LoginActivity.this);
@Override
protected void onPreExecute(){
// ProgressDialog.show(LoginActivity.this, "text..");
dialog=ProgressDialog.show(LoginActivity.this,"","Please Wait",false);
}
@Override
protected String doInBackground(String... args) {
RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
String url = args[0];
Log.d("port", port);
Log.d("host", host);
Log.d("URL:", url);
final VolleyCallback callback = null;
final JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
String json = response.toString();
ObjectMapper mapper = new ObjectMapper();
try {
user = mapper.readValue(json, User.class);
} catch (IOException e) {
e.printStackTrace();
}
if (user != null) {
Intent intent = new Intent(getBaseContext(), MainActivity.class);
intent.putExtra("host", host);
intent.putExtra("port", port);
intent.putExtra("appName", appName);
intent.putExtra("user", user); //zeby przekazac "implements Serializable
//User user =(User)getIntent().getSerializableExtra("user"); <-- żeby odebrać w 2 Activity
startActivity(intent);
if (user.getImie() != null) {
Toast.makeText(getApplicationContext(), "Witaj " + user.getImie(), Toast.LENGTH_SHORT).show();
}
}else if (json == null){
Toast.makeText(getApplicationContext(),"Błędny login lub hasło" , Toast.LENGTH_SHORT).show();
}
Log.d("Response", response.toString())
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Host1991 ", String.valueOf(isHostReachable(host)));
if(user == null){
Toast.makeText(getApplicationContext(), "Błędy login lub hasło", Toast.LENGTH_SHORT).show();
}else if(!isHostReachable(host)){
Toast.makeText(getApplicationContext(), , Toast.LENGTH_SHORT).show();
Log.d("Error.Response", error.toString());
}
}
}
);
queue.add(getRequest);
return null;
}
@Override
protected void onPostExecute(final String success) {
// spinner.setVisibility(View.GONE);
dialog.dismiss();
}
バックグラウンドスレッドで 'MainActivity'を起動しようとしているようです。それがログイン後にあなたのアプリの主要部分を起動するならば、それは良くありません。また、バックグラウンドスレッド中にUIを更新するには、 'publishProgress()'と 'onProgressUpdate()'を使います。 – Gary99