Android 试图显示ProgressDialog-出现错误

Android 试图显示ProgressDialog-出现错误,android,dialog,Android,Dialog,我有一个活动,可以在后台线程中获取谷歌地图的坐标,我想显示一个进度对话框来显示后台线程何时完成 地图类 package com.example.androidbasic12; 公共类映射扩展了碎片活动{ 悉尼私人静态车床=新车床(-33.88151.21); 公共静态LatLng sala=新LatLng(59.91602,16.594108); 国际旅行=0; int-MapTypeInt=0; 私有谷歌地图; GoogleMapOptions=new GoogleMapOptions();

我有一个活动,可以在后台线程中获取谷歌地图的坐标,我想显示一个进度对话框来显示后台线程何时完成

地图类

package com.example.androidbasic12;
公共类映射扩展了碎片活动{
悉尼私人静态车床=新车床(-33.88151.21);
公共静态LatLng sala=新LatLng(59.91602,16.594108);
国际旅行=0;
int-MapTypeInt=0;
私有谷歌地图;
GoogleMapOptions=new GoogleMapOptions();
字符串用户名;
字符串Lat1;
字符串Lng1;
双lat;
双液化天然气;
ProgressDialog=新建ProgressDialog(此);
//JSON响应节点名称
私有静态字符串密钥\u SUCCESS=“SUCCESS”;
私有静态字符串密钥\u ERROR=“ERROR”;
私有静态字符串密钥\u NAME=“NAME”;
私有静态字符串密钥\u LAT=“LAT”;
专用静态字符串密钥\u LNG=“LNG”;
字符串errorhandler=“”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.maps);
setupmapifneed();
UserFunctions userFunc=新的UserFunctions();
ArrayList cordarr=新的ArrayList();
cordarr=userFunc.getCoords(getApplicationContext(),Lat1,Lng1);
if(cordarr!=null&&cordarr.size()>1){
Log.d(“Log”,“我长得很长”);
Lat1=cordarr.get(0);
Lng1=cordarr.get(1);
lat=goDouble(Lat1);
lng=goDouble(Lng1);
LatLng sala=新LatLng(lat,lng);
mMap.addMarker(新的MarkerOptions().position(sala).title(“Coords:
+lat+“,”
+液化天然气);
options.mapType(GoogleMap.MAP\u TYPE\u NORMAL)
.compassEnabled(正确)
.RotategestureEnabled(真)
.tiltGesturesEnabled(正确);
}否则{
Log.d(“Log”,“未找到lat long”);
}
新建getCord().execute();
//按钮,默认情况下将用户发送到Sala,如果是Sala,则发送到Sydney
按钮btnSyd=(按钮)findViewById(R.id.btnSyd);
btnSyd.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成方法stu
如果(行程==0){
travelToSala();
行程=1;
}否则如果(行程==1){
travelToSydney();
行程=0;
}
}
});
//用于将地图类型设置为卫星(如果正常)、卫星(如果正常)的按钮
最终ImageButton changeBtn=(ImageButton)findViewById(R.id.changeBtn);
changeBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
changeMapType(changeBtn);
}
});     
}
//方法更改映射类型
私有void changeMapType(图像按钮){
if(MapTypeInt==0){
mMap.setMapType(GoogleMap.MAP\u TYPE\u HYBRID);
按钮。setImageResource(R.drawable.normal_映射);
MapTypeInt=1;
}else if(MapTypeInt==1){
mMap.setMapType(GoogleMap.MAP\u TYPE\u NORMAL);
按钮。setImageResource(R.drawable.satellite);
MapTypeInt=0;
}
}
//将用户传送到悉尼的功能
私人void travelToSydney(){
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(悉尼,15));
按钮btnSyd=(按钮)findViewById(R.id.btnSyd);
btnSyd.setText(“到萨拉旅行”);
}
//将用户传送到Sala的功能
private void travelToSala(){
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(萨拉,15));
按钮btnSyd=(按钮)findViewById(R.id.btnSyd);
btnSyd.setText(“去悉尼旅行!”);
}
//检查地图是否已设置,如果未设置,则设置地图
私有void setUpMapIfNeeded(){
如果(mMap==null){
mMap=((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(萨拉,15));
如果(mMap!=null){
//这张地图已核实
}
} 
}
类getCord扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
//TODO自动生成的方法存根
UserFunctions userFunction=新的UserFunctions();
username=userFunction.getUsername(getApplicationContext(),“uname”);
JSONObject json=userFunction.getCarcoord(用户名);
试一试{
if(json.getString(KEY_SUCCESS)!=null){
String res=json.getString(KEY_SUCCESS);
if(Integer.parseInt(res)==1){
//已成功找到用户的汽车坐标
DatabaseHandler db=新的DatabaseHandler(getApplicationContext());
JSONObject json_coord=json.getJSONObject(“用户”);
//清除表“table_COORD”中以前的条目
resetCarcoord(getApplicationContext());
db.addCoord(json_coord.getString(KEY_NAME)、json_coord.getString(KEY_LAT)、json_coord.getString(KEY_LNG));
errorhandler=“2”;
}
}else if(json.getString(KEY_ERROR)!=null){
String res=json.getString(KEY\u错误);
if(Integer.parseInt(res)==1){
//但是,在获取注册时不应发生某些错误
errorhandler=“1”;
}
}
}捕获(JSONException e){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
对话框。可设置可取消(true);
对话框.setMessage(“装载车辆坐标”);
dialog.show();
}
@凌驾
受保护的void onPostExecute(字符串结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
dialog.cancel();
如果(errorhandler==“1”){
Toast Toast=Toast.makeText(getA
package com.example.androidbasic12;

public class map extends FragmentActivity{
private static LatLng SYDNEY = new LatLng(-33.88,151.21);
public static  LatLng sala = new LatLng(59.91602, 16.594108);
int travel = 0;
int MapTypeInt = 0;
private GoogleMap mMap;
GoogleMapOptions options = new GoogleMapOptions();
String username;

String Lat1;
String Lng1;
Double lat;
Double lng;
ProgressDialog dialog = new ProgressDialog(this);

// JSON response node names
private static String KEY_SUCCESS = "success";
private static String KEY_ERROR = "error";
private static String KEY_NAME = "name";
private static String KEY_LAT = "lat";
private static String KEY_LNG = "lng";

String errorhandler = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.maps);
    setUpMapIfNeeded();


    UserFunctions userFunc = new UserFunctions();
    ArrayList<String> cordarr = new ArrayList<String>();
    cordarr = userFunc.getCoords(getApplicationContext(), Lat1, Lng1);
    if(cordarr != null && cordarr.size()> 1 ){
        Log.d("LOG", "I got lat long");
        Lat1 = cordarr.get(0);
        Lng1 = cordarr.get(1);
        lat = goDouble(Lat1);
        lng  = goDouble(Lng1);
        LatLng sala = new LatLng(lat, lng);
        mMap.addMarker(new MarkerOptions().position(sala).title("Coords: " 
        + lat + ", "
        + lng));
        options.mapType(GoogleMap.MAP_TYPE_NORMAL)
        .compassEnabled(true)
        .rotateGesturesEnabled(true)
        .tiltGesturesEnabled(true);
    } else {
        Log.d("LOG", "no lat long found");
    }

    new getCord().execute();



    //Button that sends the user to Sala by default, and to Sydney if Sala
    Button btnSyd =  (Button) findViewById(R.id.btnSyd);
    btnSyd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stu

            if (travel == 0){
                travelToSala();
                travel = 1;
            } else if (travel == 1) {
                travelToSydney();
                travel = 0;
            }
        }
    });
    //Button for setting map type to satellite if normal, to normal if satellite
    final ImageButton changeBtn =(ImageButton) findViewById(R.id.changeBtn);
    changeBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            changeMapType(changeBtn);
        }
    });     
}
//method that changes maptype
private void changeMapType(ImageButton button){
    if(MapTypeInt == 0){
        mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        button.setImageResource(R.drawable.normal_map);
        MapTypeInt = 1;
    } else if (MapTypeInt == 1) {
        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        button.setImageResource(R.drawable.satellite);
        MapTypeInt = 0;
    }
}
//Function that travels user to Sydney
private void travelToSydney(){
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 15));
    Button btnSyd = (Button) findViewById(R.id.btnSyd);
    btnSyd.setText("travel to Sala");
}
//Function that travels user to Sala
private void travelToSala(){
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(sala, 15));
    Button btnSyd = (Button) findViewById(R.id.btnSyd);
    btnSyd.setText("travel to Sydney!");
}
//Checks if map is setup, and if it isn't, set's up the map
private void setUpMapIfNeeded() {
    if (mMap == null) {
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(sala, 15));
        if(mMap != null){
            //The map is veriefied
        }
    } 
}

class getCord extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        UserFunctions userFunction = new UserFunctions();
        username = userFunction.getUsername(getApplicationContext(), "uname"); 
        JSONObject json = userFunction.getCarcoord(username);

        try {
            if (json.getString(KEY_SUCCESS) != null){
                String res = json.getString(KEY_SUCCESS);
                if (Integer.parseInt(res)==1){
                    //Successfully found users car coordinates
                    DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                    JSONObject json_coord = json.getJSONObject("user");

                    //clear previous entries in table "TABLE_COORD"
                    userFunction.resetCarcoord(getApplicationContext());
                    db.addCoord(json_coord.getString(KEY_NAME), json_coord.getString(KEY_LAT), json_coord.getString(KEY_LNG));
                    errorhandler = "2";

                }
            } else if(json.getString(KEY_ERROR) != null) {
                String res = json.getString(KEY_ERROR);
                if(Integer.parseInt(res) == 1){
                    //Some error in getting registration, should not happen though
                    errorhandler = "1";
                }

            }

        }catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        dialog.setCancelable(true);
        dialog.setMessage("Loading car coordinats");
        dialog.show();

    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        dialog.cancel();
        if(errorhandler == "1"){
            Toast toast = Toast.makeText(getApplicationContext(),
                    "User has not got car", Toast.LENGTH_LONG);
            toast.show();
            errorhandler = "";
        } else if (errorhandler == "2" ) {
            // Error in login
            Toast toast = Toast.makeText(getApplicationContext(),
                    "Successfully got coords for car", Toast.LENGTH_LONG);
            toast.show();
            errorhandler = "";
        }
    }
}
public Double goDouble(String Latlng) {
    Double goDouble = Double.parseDouble(Latlng);
    return goDouble;
}
01-25 13:51:00.721: E/AndroidRuntime(7780): FATAL EXCEPTION: main
01-25 13:51:00.721: E/AndroidRuntime(7780): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.androidbasic12/com.example.androidbasic12.map}: java.lang.NullPointerException
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1891)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.app.ActivityThread.access$600(ActivityThread.java:127)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.os.Looper.loop(Looper.java:137)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.app.ActivityThread.main(ActivityThread.java:4511)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at java.lang.reflect.Method.invokeNative(Native Method)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at java.lang.reflect.Method.invoke(Method.java:511)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at dalvik.system.NativeStart.main(Native Method)
01-25 13:51:00.721: E/AndroidRuntime(7780): Caused by: java.lang.NullPointerException
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:139)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:65)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.app.AlertDialog.<init>(AlertDialog.java:98)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.app.ProgressDialog.<init>(ProgressDialog.java:77)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at com.example.androidbasic12.map.<init>(map.java:42)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at java.lang.Class.newInstanceImpl(Native Method)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at java.lang.Class.newInstance(Class.java:1319)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.app.Instrumentation.newActivity(Instrumentation.java:1026)
01-25 13:51:00.721: E/AndroidRuntime(7780):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882)
01-25 13:51:00.721: E/AndroidRuntime(7780):     ... 11 more
ProgressDialog dialog ;

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub

          dialog = ProgressDialog.show(Map.this,
                   "Loading car coordinats", "Please wait ...", true, true);
          super.onPreExecute();
    }
ProgressDialog dialog = new ProgressDialog(this);
ProgressDialog dialog = new ProgressDialog(this.getActivity());
progressDialog = new ProgressDialog(youractivity.this);