2012-03-12 6 views
0

Iは以下に示されProgressDialogた:負荷にProgressDialogが表示されない...間違っているのですか?

package shc_BalloonSat.namespace; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import android.app.ProgressDialog; 
import android.util.Log; 

public class httpAPI 
{ 
    Shc_BalloonSat_Activity shc; 
    HttpClient client; 
    ArrayList<NameValuePair> nameValuePairs; 
    HttpResponse response; 
    HttpEntity entity; 
    InputStream is; 
    String result = ""; 
    HttpPost httppost; 
    Thread thread; 
    private ProgressDialog progressDialog; 

public httpAPI(Shc_BalloonSat_Activity aContext) 
{ 
    System.out.println("in the constructor"); 
     shc = aContext; 
} 

public String getData() throws Exception 
{ 
    try 
    { 
    client = new DefaultHttpClient(); 
    nameValuePairs = new ArrayList<NameValuePair>(); 
    httppost = new HttpPost(shc.pref.getString(shc.lastpacketsPHP, shc.lastpacketsPHP.toString())); 
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
    response = client.execute(httppost); 
    entity = response.getEntity(); 
    is = entity.getContent(); 
    } 

    catch (Exception e) 
    { 
    Log.e("log_tag", "Error in HTTP connection: " + e.toString()); 
    } 

    try 
    { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 

     while ((line = reader.readLine()) != null) 
     { 
       sb.append(line + "\n"); 
     } 

     is.close(); 

     result = sb.toString(); 
    } 

    catch(Exception e) 
    { 
     Log.e("log_tag", "Error converting result: " + e.toString()); 
    } 

    return result; 
} 

public void runDialog() 
{    
    while (thread.isAlive()) 
    { 
    ProgressDialog.show(shc, "Please wait...", "Retrieving data..."); 
    try 
     { 
     thread = new Thread(getData()); 
     thread.start(); 
     } 

    catch (Exception e) 
     { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
    } 

} 

}

アプリは、サーバから情報をプルし、ユーザーにそれを表示します。これは、電話の速さによって、時には時間がかかることがあります。その理由は、スレッドを追加した理由です。また、コードに示すようにProgressDialogを追加しました。私は、以下のようにメインクラスのファイルからこのすべてを呼び出しています。しかし何らかの理由で、ProgressDialogを表示したくありません。

package shc_BalloonSat.namespace; 

import java.text.DecimalFormat; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.net.ConnectivityManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.SubMenu; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Shc_BalloonSat_Activity extends Activity 
{ 
    int historyCountFromUser; 
    httpAPI api; 
    mapAPI map; 
    DecimalFormat df = new DecimalFormat("##.#####"); 
    DecimalFormat decimalf = new DecimalFormat("##.######"); 
    AlertDialog alert; 
    SharedPreferences pref; 
    Editor prefEditor; 
    String lastpacketsPHP; 


// User to determine how many packet the user would like to see. 
int userDefinedCount = 5; 

/* 
* Called when the activity is first created. 
*/ 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    loadApp(); 
} 

public boolean isNetworkConnected(Context context) 
{ 
    ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (connectionManager.getActiveNetworkInfo() != null && connectionManager.getActiveNetworkInfo().isAvailable() && connectionManager.getActiveNetworkInfo().isConnected()) 
    { 
     return true; 
    } 

    else 
    { 
     return false; 
    } 
} 

public void showAlert() 
{ 
    alert.setTitle("Sorry!"); 
    alert.setMessage("Please connect to the internet to access the full functionality of this app."); 
    alert.setButton("OK", new DialogInterface.OnClickListener() 
    { 
     public void onClick(DialogInterface dialog, int which) 
     { 

     } 
    }); 
    alert.show(); 
} 

public void onResume() 
{ 
    super.onResume(); 
    loadApp(); 
} 

public void onRestart() 
{ 
    super.onRestart(); 
    loadApp(); 
} 

public void loadApp() 
{ 
    setContentView(shc_BalloonSat.namespace.R.layout.main); 
    alert = new AlertDialog.Builder(this).create(); 
    String returned = ""; 
    lastpacketsPHP = ""; 
    pref = getSharedPreferences("shared_prefs", 0); 
    prefEditor = pref.edit(); 
    prefEditor.putString(lastpacketsPHP, "http://space.uah.edu/balloonsat_app/get_last_5_BS_packets.php"); 
    prefEditor.commit(); 

    // These next two lines are used to test the PHP files on the SHC server by determining if PHP is set up correctly. 
    //prefEditor.putString(lastpacketsPHP, "http://www.wktechnologies.com/shc_android_app/get_last_5_BS_packets.php"); 
    //prefEditor.commit(); 

    if (!isNetworkConnected(this)) 
    { 
    showAlert(); 
    } 

    else 
    { 
    api = new httpAPI(this); 
     map = new mapAPI(this); 

     try 
     { 
      returned = api.getData(); 
     } 

    catch (Exception e) 
    { 
     Toast.makeText(this, "Error: Unable to receive data at this time.", Toast.LENGTH_SHORT).show(); 
    } 

     TextView infoTV = (TextView)this.findViewById(shc_BalloonSat.namespace.R.id.info); 
    infoTV.setText(returned); 
    assignInfoToInfoTextView(); 
    assignInfoToHistoryTextView(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(shc_BalloonSat.namespace.R.menu.mainmenu, menu); 

    SubMenu submenu = menu.addSubMenu(0, Menu.FIRST, Menu.NONE, "Preferences"); 
    submenu.add(0, 5, Menu.NONE, "Get Last 5 Packets"); 
    submenu.add(0, 10, Menu.NONE, "Get Last 10 Packets"); 
    submenu.add(0, 20, Menu.NONE, "Get Last 20 Packets"); 
    inflater.inflate(shc_BalloonSat.namespace.R.menu.mainmenu, submenu); 

    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    // Handle item selection 
    switch (item.getItemId()) 
    { 
     case shc_BalloonSat.namespace.R.id.viewKML: 
      viewKML(); 
      return true; 
     case 5: 
      viewLast5Packets(); 
      return true; 
     case 10: 
      viewLast10Packets(); 
      return true; 
     case 20: 
      viewLast20Packets(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

public void assignInfoToInfoTextView() 
{ 
    TextView infoTV = (TextView)this.findViewById(shc_BalloonSat.namespace.R.id.info); 
    infoTV.setText(""); 

    try 
    { 
      api.runDialog(); 
     String result = api.result.substring(1, api.result.length()-2); 
     JSONObject json_data = new JSONObject(result); 

    double altitudeData = json_data.getDouble("altitude"); 
    double altitudeInFeet = altitudeData * 3.281; 
    String infoText = "Last Known Altitude: " + df.format(altitudeInFeet) + " ft\n"; 

    Double speedData = json_data.optDouble("speed"); 

    if (speedData.isNaN()) 
    { 
     speedData = 0.00; 
    } 

    Double direction = json_data.optDouble("heading"); 
    String directionUnits = " degrees from N"; 
     String directionText = ""; 

     if (direction == 0) 
     { 
      directionText = ", N"; 
     } 
     else if (direction > 0 && direction < 45) 
     { 
      directionText = ", N NE"; 
     } 

     else if (direction == 45) 
     { 
      directionText = ", NE"; 
     } 

     else if (direction > 45 && direction < 90) 
     { 
      directionText = ", E NE"; 
     } 

     else if (direction == 90) 
     { 
      directionText = ", E"; 
     } 

     else if (direction > 90 && direction < 135) 
     { 
      directionText = ", E SE"; 
     } 

     else if (direction == 135) 
     { 
      directionText = ", SE"; 
     } 

     else if (direction > 135 && direction < 180) 
     { 
      directionText = ", S SE"; 
     } 

     else if (direction == 180) 
     { 
      directionText = ", S"; 
     } 

     else if (direction > 180 && direction < 225) 
     { 
      directionText = ", S SW"; 
     } 

     else if (direction == 225) 
     { 
      directionText = ", SW"; 
     } 

     else if (direction > 225 && direction < 270) 
     { 
      directionText = ", W SW"; 
     } 

     else if (direction == 270) 
     { 
      directionText = ", W"; 
     } 

     else if (direction > 270 && direction < 315) 
     { 
      directionText = ", W NW"; 
     } 

     else if (direction == 315) 
     { 
      directionText = ", NW"; 
     } 

     else if (direction > 315 && direction < 360) 
     { 
      directionText = ", N NW"; 
     } 

     else if (direction.isNaN()) 
     { 
     directionText = " Invalid direction"; 
     } 

     else 
      { 

      } 

     infoText += "Last Known Velocity: " + df.format(speedData) + " m/s " + direction + directionUnits + directionText + "\n"; 

    double recentLatitudeData = json_data.getDouble("latitude"); 
    infoText += "Last Known Latitude: " + df.format(recentLatitudeData) + "\n"; 

    double recentLongitudeData = json_data.getDouble("longitude"); 
    infoText += "Last Known Longtitude: " + df.format(recentLongitudeData) + "\n"; 

    infoTV.setText(infoText); 
    } 

    catch (JSONException e) 
    { 
     // TODO Auto-generated catch block 
     Log.e("<tag>", e.getMessage()); 
     Toast.makeText(this,"Error in (Last Known) method!",Toast.LENGTH_SHORT).show(); 
    } 
    catch (Exception e) 
    { 
     Log.e("<tag>", e.getMessage()); 
     Toast.makeText(this,"Error in (Last Known) method!",Toast.LENGTH_SHORT).show(); 
    } 
} 

public void assignInfoToHistoryTextView() 
{ 
    try 
    { 
     api.getData(); 
     JSONArray jArray = new JSONArray(api.result); 
     TextView historyTV = (TextView)this.findViewById(shc_BalloonSat.namespace.R.id.history); 
     historyTV.setText(""); 

     for (int count = 1; count < userDefinedCount; count++) 
     { 
       JSONObject json_data = jArray.getJSONObject(count); 

       double altitudeData = json_data.getDouble("altitude"); 
       double altitudeInFeet = altitudeData * 3.281; 
       String historyText = "Altitude: " + decimalf.format(altitudeInFeet) + " ft\n"; 

       Double speedData = json_data.optDouble("speed"); 

       if (speedData.isNaN()) 
       { 
        speedData = 0.00; 
       } 

        Double direction = json_data.optDouble("heading"); 
        String directionUnits = " degrees from N"; 
      String directionText = ""; 

      if (direction == 0) 
      { 
       directionText = ", N"; 
      } 
      else if (direction > 0 && direction < 45) 
      { 
       directionText = ", N NE"; 
      } 

      else if (direction == 45) 
      { 
       directionText = ", NE"; 
      } 

      else if (direction > 45 && direction < 90) 
      { 
       directionText = ", E NE"; 
      } 

      else if (direction == 90) 
      { 
       directionText = ", E"; 
      } 

      else if (direction > 90 && direction < 135) 
      { 
       directionText = ", E SE"; 
      } 

      else if (direction == 135) 
      { 
       directionText = ", SE"; 
      } 

      else if (direction > 135 && direction < 180) 
      { 
       directionText = ", S SE"; 
      } 

      else if (direction == 180) 
      { 
       directionText = ", S"; 
      } 

      else if (direction > 180 && direction < 225) 
      { 
       directionText = ", S SW"; 
      } 

      else if (direction == 225) 
      { 
       directionText = ", SW"; 
      } 

      else if (direction > 225 && direction < 270) 
      { 
       directionText = ", W SW"; 
      } 

      else if (direction == 270) 
      { 
       directionText = ", W"; 
      } 

      else if (direction > 270 && direction < 315) 
      { 
       directionText = ", W NW"; 
      } 

      else if (direction == 315) 
      { 
       directionText = ", NW"; 
      } 

      else if (direction > 315 && direction < 360) 
      { 
       directionText = ", N NW"; 
      } 

      else if (direction.isNaN()) 
      { 
       directionText = " Invalid direction"; 
      } 

      else 
      { 

      } 

      if (direction.isNaN()) 
      { 
       historyText += "Velocity: " + df.format(speedData) + " m/s " + directionText + "\n"; 
      } 

      else 
      { 
       historyText += "Velocity: " + df.format(speedData) + " m/s,\n" + direction + directionUnits + directionText + "\n"; 
      } 

       double latitudeData = json_data.getDouble("latitude"); 
       historyText += "Latitude: " + df.format(latitudeData) + "\n"; 

       double longitudeData = json_data.getDouble("longitude"); 
       historyText += "Longtitude: " + df.format(longitudeData) + "\n\n"; 

       historyTV.append(historyText); 
     } 
    } 

    catch (JSONException e) 
    { 
     // TODO Auto-generated catch block 
     Log.e("log_tag", "Error parsing data: " + e.toString()); 
    } 
    catch(Exception e) 
    { 
     Log.e("log_tag", "Error parsing data: " + e.toString()); 
    } 

} 

void viewLast5Packets() 
{ 
    if (!isNetworkConnected(this)) 
    { 
     showAlert(); 
    } 

    else 
    { 
     userDefinedCount = 5; 
     prefEditor.putString(lastpacketsPHP, "http://space.uah.edu/balloonsat_app/get_last_5_BS_packets.php"); 
     prefEditor.commit(); 
     assignInfoToInfoTextView(); 
     assignInfoToHistoryTextView(); 
    } 
} 

void viewLast10Packets() 
{ 
    if (!isNetworkConnected(this)) 
    { 
     showAlert(); 
    } 

    else 
    { 
     userDefinedCount = 10; 
     prefEditor.putString(lastpacketsPHP, "http://space.uah.edu/balloonsat_app/get_last_10_BS_packets.php"); 
     prefEditor.commit(); 
     assignInfoToInfoTextView(); 
     assignInfoToHistoryTextView(); 
    } 
} 

void viewLast20Packets() 
{ 
    if (!isNetworkConnected(this)) 
    { 
     showAlert(); 
    } 

    else 
    { 
     userDefinedCount = 20; 
     prefEditor.putString(lastpacketsPHP, "http://space.uah.edu/balloonsat_app/get_last_20_BS_packets.php"); 
     prefEditor.commit(); 
     assignInfoToInfoTextView(); 
     assignInfoToHistoryTextView(); 
    } 
} 

public void viewKML() 
{ 
    if (!isNetworkConnected(this)) 
    { 
     showAlert(); 
    } 

    else 
    { 
     map.openKML(); 
    } 
} 
} 

私が間違っている可能性のあるアイデアはありますか?

答えて

1
public void runDialog() {   
    Thread thread = null; 
    while (thread.isAlive()) // You access null value here 
    ... 
} 

第二に、あなたは潜在的に不安定と明らかに冗長である、onCreate(..)onResume()onRestart()方法の中から、あなたのloadApp()メソッドを呼び出します。これらのメソッドの1つから呼び出す必要があります。

+0

スレッドの宣言を上に移動してnullを削除しました。この問題を修正する必要があります。私は情報をキャッシュする方法を知らない。その方法を知っていたら、onResume()とonRestart()のloadApp()の別のバージョンを作成します。 – tylerbhughes

+0

あなたは間違っている。最初に、初期化されていないオブジェクトにアクセスしようとしています: あなたは 'thread.isAlive()'を呼び出し、 'thread = new Thread(getData())の後に;'第2に、 'Thread(String name ) 'コンストラクタはあなたが実際に必要とするものではなく、[' Thread(Runnable) '](http://developer.android.com/reference/java/lang/Thread.html#Thread(java.lang.Runnable) ))。 –

+0

ああ、私はループの上にtry/catchステートメントを移動し、今私はProressDialogを提供します。私はそれを捕まえなかったとは信じられません。小さな副作用が1つありますが、それを修正できるはずです。ご協力いただきありがとうございます! – tylerbhughes

0
public void runDialog(){ 
    Thread = null; 
} 

ラインを確認してください...

関連する問題