gpt4 book ai didi

java - 如何修复GPS服务程序中的空指针异常?

转载 作者:行者123 更新时间:2023-12-01 09:38:37 25 4
gpt4 key购买 nike

我对 Android 相当陌生,我想将 GPS 显示的坐标保存在文本文件中。我之前问过这个问题,我也得到了回复。然而,当我尝试代码时,我遇到了空指针异常。有谁对如何解决这个问题有任何想法? (下面的大部分代码不是我的)。

链接到我之前的问题:How do I get coordinates from a GPS service into a text file?

当前代码:

public class MainActivity extends AppCompatActivity {

private Button btn_start, btn_stop;
public Button save;
BufferedWriter writer;

private BroadcastReceiver broadcastReceiver;
int delay = 1000; // delay for 1 sec.
int period = 10000; // repeat every 10 sec.
Timer timer = new Timer();
public EditText editText;
public TextView textView;

public String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/aaTutorial";





@Override
protected void onResume() {
super.onResume();
if(broadcastReceiver == null){
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent)
{

textView.append("\n" +intent.getExtras().get("coordinates"));

try {
writer.write((String) intent.getExtras().get("coordinates"));
} catch (IOException e) {
e.printStackTrace();
}
try {
writer.newLine();
} catch (IOException e) {
e.printStackTrace();
}

}
};
};
registerReceiver(broadcastReceiver,new IntentFilter("location_update"));
}




protected void onDestroy() {
super.onDestroy();
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
if(broadcastReceiver != null){
unregisterReceiver(broadcastReceiver);
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
writer = new BufferedWriter(new FileWriter("mnt/sdcard/gps.txt"));
} catch (IOException e) {
e.printStackTrace();
}


btn_start = (Button) findViewById(R.id.button);
btn_stop = (Button) findViewById(R.id.button2);
textView = (TextView) findViewById(R.id.textView);
// save = (Button) findViewById(R.id.save);
File dir = new File(path);
dir.mkdirs();

if(!runtime_permissions())
enable_buttons();

}

private void enable_buttons() {

btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i =new Intent(getApplicationContext(),GPS_Service.class);
startService(i);
}
});




btn_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

Intent i = new Intent(getApplicationContext(),GPS_Service.class);
stopService(i);

}
});

}

private boolean runtime_permissions() {
if(Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){

requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},100);

return true;
}
return false;
}


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == 100){
if( grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED){
enable_buttons();
}else {
runtime_permissions();
}
}
}
}

错误发生在OnResume方法下的第一次try/catch中。

Attempt to invoke virtual method 'void java.io.BufferedWriter.write(java.lang.String)' on a null object reference in the logcat.

最佳答案

您的写入器未初始化,因为您尝试写入的文件无效。首先,您省略了开头的 /,您的意思是 /mnt/sdcard。其次,不保证 SD 卡安装在何处。永远不要在android中使用sd卡的直接路径,使用getExternalDirectory来查找它。第三,在 kitkat 及以上版本上,这仍然会失败,因为您没有对 sdcard 根目录的写访问权限。

关于java - 如何修复GPS服务程序中的空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38623709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com