0

我正在使用一个面向 android 数据库的程序。此活动来自我的一个标签。当我按下该特定选项卡时,它将从数据库中获取值,如果数据库中有任何空值,它将捕获它并显示一个警报框并更改为另一个选项卡。这是我的逻辑。但它没有执行 catch 块。它直接进入 webview 并在那里显示一个空值。请任何人帮我解决这个错误。这是我的课......

位置活动

import java.util.List;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.ProgressBar;


@SuppressLint("SetJavaScriptEnabled")
public class LocationActivity extends Activity {

    MainTabActivity mainTab;

    WebView mWebView;
    GPSTracker g;
    double my_lat, my_lon;
    String lat, lon, to_lat, to_lon, addressText, temp_lat, temp_lon;
    DatabaseHandler db;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        db = new DatabaseHandler(this);
        g = new GPSTracker(this);



            Log.d("Reading: ", "Location Activity Reading all Values");

        List<Datas> datas = db.getAllDatas();       

        for (Datas dat : datas) {
            try{
            to_lat = dat.getlat();
            to_lon = dat.getlon();
            }catch(NullPointerException e){

                AlertDialog.Builder alert = new AlertDialog.Builder(this);

                alert.setTitle("Oops!");

                // set dialog message
                alert
                    .setMessage("Please select a destination before finding your route!")
                    .setCancelable(false)
                    .setPositiveButton("ok",new DialogInterface.OnClickListener() {
                        @SuppressWarnings("deprecation")
                        public void onClick(DialogInterface dialog,int id) {

                          ((MainTabActivity)getParent()).getTabHost().setCurrentTab(0);
                          }
                      });

                    // create alert dialog
                    AlertDialog alertDialog = alert.create();

                    // show it
                    alertDialog.show();

            Log.d(to_lat, to_lon);
            System.out.println("Frim thap thee "+ to_lat + " " + to_lon);
            }
        }
        setContentView(R.layout.webview);        
        getWindow().setFeatureInt(Window.FEATURE_PROGRESS,Window.PROGRESS_VISIBILITY_ON);
            final ProgressBar pb = (ProgressBar) findViewById(R.id.progressBar1);
            pb.setVisibility(View.VISIBLE);

            my_lat = g.getLatitude();
            my_lon = g.getLongitude();
            lat = String.valueOf(my_lat);
            lon = String.valueOf(my_lon);



            mWebView = (WebView)findViewById(R.id.webview1);
            mWebView.setWebChromeClient(new WebChromeClient() {
             public void onProgressChanged(WebView view, int progress) {
              pb.setProgress(progress);
              if (progress == 100) {
               pb.setVisibility(View.GONE);
              }
             }
            });

            WebSettings webSettings = mWebView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            mWebView.setWebViewClient(new HelloWebViewClient());
            addressText = lat + "," + lon + "+to:" + to_lat + ","+ to_lon;
            addressText = addressText.replaceAll(" ", "%20");
            addressText = addressText.replaceAll("#", "%23");
            mWebView.loadUrl("http://maps.google.com/maps?q=from:"+ addressText);


  }

}
4

4 回答 4

1

将字符串设置为 null 本身不是问题,也不会引发 NullPointerException。但是,如果您尝试在 String 上调用一个为 null 的方法,您会得到一个异常。

String s = null; //no problem
s.isEmpty(); //Would throw a nullpointer exception

删除 try catch 子句并使用 if 语句进行简单检查

to_lat = dat.getlat();
to_lon = dat.getlon();
if(to_lat == null || to_long == null()
{
    //Show the alert
}
于 2013-05-01T10:22:27.103 回答
1

首先使用 if(datas.size()>0) 检查数据中是否有任何内容,然后使用 for 循环。

于 2013-05-01T11:38:34.720 回答
1

getlat并且getlon可能为空,因此不会抛出exception. 您应该将您try/catch的替换if为检查null.

此外,您的真正问题NullPointerException是:

Log.d(to_lat, to_lon);

Log.d应该与TAGas 第一个参数和Stringas 第二个参数一起使用:

Log.d("LOCATION", "From " + to_lat + ", to " + to_lon);

如果to_lat并且to_lonnull

log.d(null, null); 

肯定会导致崩溃。

于 2013-05-01T10:19:27.017 回答
0

to_lat, to_lon 是字符串,它们可以为空。那么,为什么您希望在 catch 块中包含 NPE?

于 2013-05-01T10:13:13.520 回答