I am using the following code to write an onPostExecute process to file from my FileWriter.class, it was working fine but am updating my application and I have to use the Environment.getExternalStorageDirectory().getPath(); instead of this, i tried following. I know doing something slightly wrong. Any Help or direction would be helpful.
Thanks.
public class FileWriter {
public void appendData( String text) {
try {
File myFile = new File("/sdcard/latencyOP.csv");
// myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter =
new OutputStreamWriter(fOut);
if (myFile.createNewFile()) {
myOutWriter.append("TimeStamp,ExecutionTime,OperationType;");
}
myOutWriter.append(text);
myOutWriter.close();
fOut.close();
/**
* Toast.makeText(getBaseContext(),
* "Done writing SD 'mysdfile.txt'",
Toast.LENGTH_SHORT).show();
*/
} catch (Exception e) {
/**
* Toast.makeText(getBaseContext(), e.getMessage(),
* Toast.LENGTH_SHORT).show();
*/
}
}
}
EDIT
I forgot to add that I am attempting to do some background operations and publish results on the **FILE.csv** thread without having to manipulate threads.
UPDATED CODE #Leonardo Acevedo
try {
File myFile = new File(
Environment.getExternalStorageDirectory(),
"latencyOP.csv"
);
boolean needToCreateFile = !myFile.exists();
if (needToCreateFile) {
myFile.createNewFile();
}
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter =
new OutputStreamWriter(fOut);
// At this point your file is guaranteed to exist
if (needToCreateFile) {
myOutWriter.append("TimeStamp,ExecutionTime,OperationType;");
}
myOutWriter.append(text);
myOutWriter.close();
fOut.close();
Toast.makeText(getBaseContext(),
"Done writing SD 'mysdfile.txt'",
Toast.LENGTH_SHORT
).show();
} catch (Exception e) {
e.printStackTrace();
displayExceptionMessage(e.getMessage());
//Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
public void displayExceptionMessage(String msg) {
//Toast.makeText(this, "Some Error Occured", Toast.LENGTH_SHORT).show();
}
ASYNCH TASK PROCESS
protected void onPreExecute(){ startTime = Calendar.getInstance().getTime().getTime();
}
protected void onPostExecute(Long result) {
endTime = Calendar.getInstance().getTime().getTime();
long timeDiff = endTime - startTime;
FileWriter fileWriter = new FileWriter();
String data = endTime + "," + timeDiff + "," + "Authentication" + ";";
fileWriter.appendData(data);
}
Is this wrong ?
03-14 20:42:52.062 17192-17192/com.demo.common.recordwritertest W/System.err: java.io.IOException: Permission denied
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at java.io.UnixFileSystem.createFileExclusively0(Native Method)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:280)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at java.io.File.createNewFile(File.java:948)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at com.demo.common.recordwritertest.utils.FileWriter.appendData(FileWriter.java:25)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at com.demo.common.recordwritertest.com.demo.common.recordwritertest.asynctasks.AuthenticationAsyncTask.onPostExecute(AuthenticationAsyncTask.java:119)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at com.demo.common.recordwritertest.com.demo.common.recordwritertest.asynctasks.AuthenticationAsyncTask.onPostExecute(AuthenticationAsyncTask.java:27)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at android.os.AsyncTask.finish(AsyncTask.java:667)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at android.os.AsyncTask.-wrap1(AsyncTask.java)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at android.os.Looper.loop(Looper.java:154)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6119)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at java.lang.reflect.Method.invoke(Native Method)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
03-14 20:42:52.063 17192-17192/com.demo.common.recordwritertest W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Related
I want to take an user Screenshot, I used this code. I was take 3 permission, READ_EXTERNAL_STORE,WRITE_EXTERNAL_STORE, and READ_EXTERNAL_STORAGE. Problem not fix. It show open failed: EPERM (Operation not permitted)
public void tackeAndSaveScreenShot(Activity mActivity) {
View MainView = mActivity.getWindow().getDecorView();
MainView.setDrawingCacheEnabled(true);
MainView.buildDrawingCache();
Bitmap MainBitmap = MainView.getDrawingCache();
Rect frame = new Rect();
mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
//to remove statusBar from the taken sc
int statusBarHeight = frame.top;
//using screen size to create bitmap
int width = mActivity.getWindowManager().getDefaultDisplay().getWidth();
int height = mActivity.getWindowManager().getDefaultDisplay().getHeight();
Bitmap OutBitmap = Bitmap.createBitmap(MainBitmap, 0, statusBarHeight, width, height - statusBarHeight);
MainView.destroyDrawingCache();
try {
String path = Environment.getExternalStorageDirectory().toString();
OutputStream fOut = null;
//you can also using current time to generate name
String name="YourName";
File file = new File(path, name + ".png");
fOut = new FileOutputStream(file);
OutBitmap.compress(Bitmap.CompressFormat.PNG, 1000, fOut);
fOut.flush();
fOut.close();
//this line will add the saved picture to gallery
MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
When I check on my Logcat. they show the problem is in
fOut = new FileOutputStream(file);
I get permission properly.
private void userPermission2(){
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.MANAGE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},REQUEST_CODE1);
}
}
#Override
public void onRequestPermissionsResult(int requestCode, #NonNull String[] permissions, #NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE && grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
userPermission2();
}else {
Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
}
}
I tried many why but don'work. Every time is the same problem.
The log is.
D/CompatibilityChangeReporter: Compat change id reported: 147798919; UID 10351; state: ENABLED
W/System.err: java.io.FileNotFoundException: /storage/emulated/0/YourName.png: open failed: EPERM (Operation not permitted)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:492)
W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:236)
W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:186)
W/System.err: at com.example.myapplication.MainActivity.tackeAndSaveScreenShot(MainActivity.java:93)
W/System.err: at com.example.myapplication.MainActivity$1.onClick(MainActivity.java:64)
W/System.err: at android.view.View.performClick(View.java:7570)
W/System.err: at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1202)
W/System.err: at android.view.View.performClickInternal(View.java:7525)
W/System.err: at android.view.View.access$3900(View.java:836)
W/System.err: at android.view.View$PerformClick.run(View.java:28680)
W/System.err: at android.os.Handler.handleCallback(Handler.java:938)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err: at android.os.Looper.loop(Looper.java:254)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:8243)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)
W/System.err: Caused by: android.system.ErrnoException: open failed: EPERM (Operation not permitted)
W/System.err: at libcore.io.Linux.open(Native Method)
W/System.err: at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:254)
W/System.err: at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
W/System.err: at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8125)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:478)
W/System.err: ... 16 more
String path = Environment.getExternalStorageDirectory().toString();
Change to:
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).toString();
And for Android 10 devices add android:legacyExternalStorage="true" to application tag in manifest file.
For Android 13+ devices you do not need any permission.
I'm creating an Android project where the Registrationadmin activity connects to a PHP file (in a local server, localhost) using HttpURLConnection;
I am having problem while running the project i am getting this D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
I have already given the connection and read timeout.
Registrationadmin.java code is:
public void btnregisteradm(View v) {
if (awesomeValidation.validate()) {
admname = name.getText().toString();
admpass = password.getText().toString();
admemail = email.getText().toString();
admmob = mob.getText().toString();
//Toast.makeText(ctx, "we are here", Toast.LENGTH_SHORT).show();
String method = "register";
BackgroundTask backgroundTask = new BackgroundTask(this);
backgroundTask.execute(method,admname,admemail,admpass,admmob);
finish();
}
}
my BackgroundTask.java is
package com.example.hp.healthcareapp;
import android.app.AlertDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import static android.content.ContentValues.TAG;
/**
* Created by HP on 12/18/2017.
*/
public class BackgroundTask extends AsyncTask<String,Void,String> {
AlertDialog alertDialog;
Context ctx;
BackgroundTask(Context ctx)
{
this.ctx =ctx;
}
#Override
protected void onPreExecute() {
alertDialog = new AlertDialog.Builder(ctx).create();
alertDialog.setTitle("Login Information....");
}
#Override
protected String doInBackground(String... params) {
String reg_url = "http://10.14.83.2:8080/register.php";
String login_url = "http://192.168.2.4:8080/login.php";
String method = params[0];
if (method.equals("register")) {
String admname = params[1];
//Log.d(TAG,admname);
String admemail = params[2];
String admpass = params[3];
String admmob = params[4];
try {
URL url = new URL(reg_url);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setReadTimeout(10000);
httpURLConnection.setConnectTimeout(15000);
//httpURLConnection.setDoInput(true);
OutputStream OS = httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8"));
String data = URLEncoder.encode("admname", "UTF-8")+"="+URLEncoder.encode(admname, "UTF-8") + "&" +
URLEncoder.encode("admemail", "UTF-8")+"="+URLEncoder.encode(admemail, "UTF-8") + "&" +
URLEncoder.encode("admpass", "UTF-8")+"="+URLEncoder.encode(admpass, "UTF-8")+"&"+
URLEncoder.encode("admmob", "UTF-8")+"="+URLEncoder.encode(admmob, "UTF-8");
Log.d(TAG,data);
httpURLConnection.connect();
bufferedWriter.write(data);
bufferedWriter.flush();
bufferedWriter.close();
OS.close();
InputStream IS = httpURLConnection.getInputStream();
IS.close();
//httpURLConnection.connect();
httpURLConnection.disconnect();
return "Registration Success...";
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
else if(method.equals("login"))
{
}
return null;
}
#Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
#Override
protected void onPostExecute(String result) {
if(result.equals("Registration Success..."))
{
Toast.makeText(ctx, result, Toast.LENGTH_LONG).show();
}
else
{
alertDialog.setMessage(result);
alertDialog.show();
}
}
}
register.php is
<?php
echo "this is it";
require "init.php";
$admmane = (isset($_POST['admname']) ) ? $_POST['admname'] : '';
$admpass = (isset($_POST['admpass']) ) ? $_POST['admpass'] : '';
$admemail = (isset($_POST['admemail']) ) ? $_POST['admemail'] : '';
$admmob=(isset($_POST['admmob']) ) ? $_POST['admmob'] : '';
//$admmane = "sdf";
//$admpassword = "sdf";
//$admemail = "sdf#r54";
//$admmob="sdf";
$sql_query= "insert into admin values ('$admmane','$admemail','$admpass','$admmob');";
if(mysqli_query($con, $sql_query)){
echo '{"message":"able to save the data to the database."}';
}
?>
logcat which i am getting on running the project is:
12-19 11:24:48.803 2555-2560/com.example.hp.healthcareapp I/zygote: Increasing code cache capacity to 1024KB
12-19 11:24:55.026 2555-3178/com.example.hp.healthcareapp D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
12-19 11:24:55.048 2555-3178/com.example.hp.healthcareapp D/ContentValues: admname=shaista&admemail=shaista8080%40gmail.com&admpass=Pro%401234&admmob=9593626313
12-19 11:24:55.277 2555-2618/com.example.hp.healthcareapp D/EGL_emulation: eglMakeCurrent: 0x9f1840c0: ver 2 0 (tinfo 0x9f183300)
12-19 11:24:55.393 2555-2618/com.example.hp.healthcareapp D/EGL_emulation: eglMakeCurrent: 0x9f1840c0: ver 2 0 (tinfo 0x9f183300)
12-19 11:24:55.481 2555-2618/com.example.hp.healthcareapp D/EGL_emulation: eglMakeCurrent: 0x9f1840c0: ver 2 0 (tinfo 0x9f183300)
12-19 11:24:55.495 2555-2618/com.example.hp.healthcareapp D/OpenGLRenderer: endAllActiveAnimators on 0x8bb11880 (RippleDrawable) with handle 0x9f183b50
12-19 11:25:05.057 2555-3178/com.example.hp.healthcareapp W/System.err: java.net.SocketTimeoutException: timeout
12-19 11:25:05.058 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.okio.Okio$3.newTimeoutException(Okio.java:212)
12-19 11:25:05.059 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.okio.AsyncTimeout.exit(AsyncTimeout.java:261)
12-19 11:25:05.059 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:215)
12-19 11:25:05.060 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
12-19 11:25:05.061 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
12-19 11:25:05.063 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
12-19 11:25:05.065 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:186)
12-19 11:25:05.065 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:127)
12-19 11:25:05.067 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:737)
12-19 11:25:05.067 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:609)
12-19 11:25:05.068 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:471)
12-19 11:25:05.071 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
12-19 11:25:05.071 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:244)
12-19 11:25:05.072 2555-3178/com.example.hp.healthcareapp W/System.err: at com.example.hp.healthcareapp.BackgroundTask.doInBackground(BackgroundTask.java:70)
12-19 11:25:05.072 2555-3178/com.example.hp.healthcareapp W/System.err: at com.example.hp.healthcareapp.BackgroundTask.doInBackground(BackgroundTask.java:25)
12-19 11:25:05.073 2555-3178/com.example.hp.healthcareapp W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:333)
12-19 11:25:05.074 2555-3178/com.example.hp.healthcareapp W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
12-19 11:25:05.076 2555-3178/com.example.hp.healthcareapp W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
12-19 11:25:05.077 2555-3178/com.example.hp.healthcareapp W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
12-19 11:25:05.077 2555-3178/com.example.hp.healthcareapp W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
12-19 11:25:05.078 2555-3178/com.example.hp.healthcareapp W/System.err: at java.lang.Thread.run(Thread.java:764)
12-19 11:25:05.079 2555-3178/com.example.hp.healthcareapp W/System.err: Caused by: java.net.SocketException: Socket closed
12-19 11:25:05.080 2555-3178/com.example.hp.healthcareapp W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:203)
12-19 11:25:05.080 2555-3178/com.example.hp.healthcareapp W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:139)
12-19 11:25:05.082 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.okio.Okio$2.read(Okio.java:136)
12-19 11:25:05.083 2555-3178/com.example.hp.healthcareapp W/System.err: at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:211)
12-19 11:25:05.083 2555-3178/com.example.hp.healthcareapp W/System.err: ... 18 more
12-19 11:25:05.085 2555-2555/com.example.hp.healthcareapp D/AndroidRuntime: Shutting down VM
12-19 11:25:05.089 2555-2555/com.example.hp.healthcareapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.hp.healthcareapp, PID: 2555
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at com.example.hp.healthcareapp.BackgroundTask.onPostExecute(BackgroundTask.java:95)
at com.example.hp.healthcareapp.BackgroundTask.onPostExecute(BackgroundTask.java:25)
at android.os.AsyncTask.finish(AsyncTask.java:695)
at android.os.AsyncTask.-wrap1(Unknown Source:0)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
can you please check whether below 2 API endpoints are working
You can check it using postman
Run app on server (put server ip from below urls)
String reg_url = "http://10.14.83.2:8080/register.php";
String login_url = "http://192.168.2.4:8080/login.php";
Make sure if these are working.that should return 200 response.
You can then check into database if registration data is getting saved.
I am loading a map in my app from kml files (with a different kml file on each day of the week being loaded). It was working until just recently and I'm really confused as to why I am getting this error as I haven't touched this part of my code since I got it working basically and now I am getting a XmlPullParserException: expected: /META read: HEAD (position:END_TAG #1:355 in java.io.InputStreamReader#426ba9d0)
Here is my code:
// set kml layers
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
InputStream inputStream = null;
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
int value = preferences.getInt("DateStarted", 1);
Log.d(TAG, String.valueOf(value));
System.out.println("In Maps start day is " + String.valueOf(value));
try {
// get different maps on different days of the week
switch(value) {
case Calendar.MONDAY:
inputStream = new URL("http://www.inf.ed.ac.uk/teaching/courses/selp/coursework/monday.kml").openStream();
break;
case Calendar.TUESDAY:
inputStream = new URL("http://www.inf.ed.ac.uk/teaching/courses/selp/coursework/tuesday.kml").openStream();
break;
case Calendar.WEDNESDAY:
inputStream = new URL("http://www.inf.ed.ac.uk/teaching/courses/selp/coursework/wednesday.kml").openStream();
break;
case Calendar.THURSDAY:
inputStream = new URL("http://www.inf.ed.ac.uk/teaching/courses/selp/coursework/thursday.kml").openStream();
break;
case Calendar.FRIDAY:
inputStream = new URL("http://www.inf.ed.ac.uk/teaching/courses/selp/coursework/thursday.kml").openStream();
break;
case Calendar.SATURDAY:
inputStream = new URL("http://www.inf.ed.ac.uk/teaching/courses/selp/coursework/saturday.kml").openStream();
break;
case Calendar.SUNDAY:
inputStream = new URL("http://www.inf.ed.ac.uk/teaching/courses/selp/coursework/sunday.kml").openStream();
break;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
try {
layer = new KmlLayer(mMap, inputStream, getApplicationContext());
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
layer.addLayerToMap();
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
and the full error message that I'm getting is :
> W/System.err: org.xmlpull.v1.XmlPullParserException: expected: /META read: HEAD (position:END_TAG </HEAD>#1:355 in java.io.InputStreamReader#426ba9d0)
W/System.err: at org.kxml2.io.KXmlParser.readEndTag(KXmlParser.java:970)
W/System.err: at org.kxml2.io.KXmlParser.next(KXmlParser.java:372)
W/System.err: at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
W/System.err: at com.google.maps.android.kml.KmlParser.parseKml(KmlParser.java:90)
W/System.err: at com.google.maps.android.kml.KmlLayer.<init>(KmlLayer.java:49)
W/System.err: at com.example.veronika.grabble.MapsActivity.onMapReady(MapsActivity.java:169)
W/System.err: at com.google.android.gms.maps.SupportMapFragment$zza$1.zza(Unknown Source)
W/System.err: at com.google.android.gms.maps.internal.zzt$zza.onTransact(Unknown Source)
W/System.err: at android.os.Binder.transact(Binder.java:347)
W/System.err: at aai.a(:com.google.android.gms.DynamiteModulesB:82)
W/System.err: at maps.ad.t$5.run(Unknown Source)
W/System.err: at android.os.Handler.handleCallback(Handler.java:730)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:92)
W/System.err: at android.os.Looper.loop(Looper.java:213)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5225)
W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err: at java.lang.reflect.Method.invoke(Method.java:525)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
W/System.err: at dalvik.system.NativeStart.main(Native Method)
D/AndroidRuntime: Shutting down VM
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x420218b0)
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.veronika.grabble.MapsActivity.onMapReady(MapsActivity.java:176)
at com.google.android.gms.maps.SupportMapFragment$zza$1.zza(Unknown Source)
at com.google.android.gms.maps.internal.zzt$zza.onTransact(Unknown Source)
at android.os.Binder.transact(Binder.java:347)
at aai.a(:com.google.android.gms.DynamiteModulesB:82)
at maps.ad.t$5.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Does anyone have an idea of how I should go about fixing this? Because I don't understand where does the null pointer exception comes from...
PS: the log.d shows that value has a value in one of the cases, and so that should put a different inputStream than null ....
hey guys i keep getting this error in my app when i try to get data from a server and read it as json and i am stuck because it doesnt happen all the time hear is the code
private class statusUpdateTask extends AsyncTask<String, String, String> {
#Override
protected String doInBackground(String... urls) {
if(testServe("http://www.gogodis.comxa.com/getData.php")) {
HttpURLConnection conn = null;
BufferedReader reader = null;
try {
URL url = new URL(urls[0]);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
reader = new BufferedReader(new InputStreamReader(is));
StringBuffer sb = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else{
retry(0);
}
return null;
}
#Override
protected void onPostExecute(String result) {
if(isJSONValid(result)) {
try {
JSONObject results = new JSONObject(result);
JSONArray jr = results.getJSONArray("results");
JSONObject set = jr.getJSONObject(0);
JSONObject info = set.getJSONArray("info").getJSONObject(0);
if (info.getString("state").equals("ok")) {
if (info.getInt("inbox") == 1) {
inbox.setImageResource(R.drawable.camr);
} else inbox.setImageResource(R.drawable.cam);
if (info.getInt("chat") == 1) {
chat.setImageResource(R.drawable.msgr);
} else chat.setImageResource(R.drawable.msg);
if(info.getInt("match") == 1){
new newMatchUpdateTask().execute("http://www.gogodis.comxa.com/getData.php?type=new_match&&user=" + my_user_id);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}else{
retry(0);
}
}
}
and hear is the logcast
05-30 15:05:11.205 5071-5394/com.reallyChat W/System.err: java.net.SocketTimeoutException
05-30 15:05:11.676 5071-5394/com.reallyChat W/System.err: at java.net.PlainSocketImpl.read(PlainSocketImpl.java:491)
05-30 15:05:11.676 5071-5394/com.reallyChat W/System.err: at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.io.InputStream.read(InputStream.java:163)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:142)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at libcore.io.Streams.readAsciiLine(Streams.java:201)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:573)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:821)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at com.really_chat.results$statusUpdateTask.doInBackground(results.java:968)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at com.really_chat.results$statusUpdateTask.doInBackground(results.java:953)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:234)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.lang.Thread.run(Thread.java:856)
05-30 15:05:11.696 5071-5071/com.reallyChat D/AndroidRuntime: Shutting down VM
05-30 15:05:11.706 5071-5071/com.reallyChat W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x411cd930)
05-30 15:05:11.726 5071-5071/com.reallyChat E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
at org.json.JSONTokener.nextValue(JSONTokener.java:94)
at org.json.JSONObject.<init>(JSONObject.java:154)
at org.json.JSONObject.<init>(JSONObject.java:171)
at com.really_chat.results.isJSONValid(results.java:1158)
at com.really_chat.results$statusUpdateTask.onPostExecute(results.java:989)
at com.really_chat.results$statusUpdateTask.onPostExecute(results.java:953)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5283)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
iv'e even tried to put in code that confirms its json but still no luck
public boolean isJSONValid(String test) {
try{
new JSONObject(test);
}catch(JSONException ex){
try{
new JSONArray(test);
}catch(JSONException ex1){
return false;
}
}
return true;
}
private boolean testServe(String url) {
try{
URL myUrl = new URL(url);
URLConnection connection = myUrl.openConnection();
connection.setConnectTimeout(15000);
connection.connect();
return true;
} catch (Exception e) {
// Handle your exceptions
return false;
}
}
Try to change like this
conn.setReadTimeout(0 /* milliseconds */);//Infinite timeout
conn.setConnectTimeout(25000 /* milliseconds */);
This question already has answers here:
NetworkOnMainThreadException [duplicate]
(5 answers)
Closed 7 years ago.
I'm getting NetworkOnMainThreadException while using Runnable
Code:
public class FullscreenActivity extends AppCompatActivity {
public Socket socket;
public int SERVERPORT = 5000; /* port 5000 (for testing) */
public String SERVER_IP = "10.0.2.2"; /* local Android address of localhost */
ViewFlipper flipper;
ListView listing;
public void attemptConnect(View view) {
try {
EditText editTextAddress = (EditText) findViewById(R.id.address);
EditText editTextPort = (EditText) findViewById(R.id.port);
String SERVER_IP_loc = editTextAddress.getText().toString();
int SERVERPORT_loc = Integer.parseInt(editTextPort.getText().toString());
System.out.println("Attempt Connect: IP " + SERVER_IP_loc + " Port: " + SERVERPORT_loc);
System.out.println("SET");
ClientThread myClientTask = new ClientThread(SERVER_IP_loc, SERVERPORT_loc);
myClientTask.run();
System.out.println("CONNECTED");
flipper.setDisplayedChild(1);
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
// Thinks the following is not a thread ??
class ClientThread implements Runnable {
ClientThread(String addr, int port) {
SERVER_IP = addr;
SERVERPORT = port;
}
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
// gets to this line fine
socket = new Socket(serverAddr, SERVERPORT);
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
My permissions are set up to allow internet access:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
I'm getting the following error:
6188-6188/test W/System.err: android.os.NetworkOnMainThreadException
6188-6188/test W/System.err: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
6188-6188/test W/System.err: at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
6188-6188/test W/System.err: at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
6188-6188/test W/System.err: at libcore.io.IoBridge.connect(IoBridge.java:122)
6188-6188/test W/System.err: at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
6188-6188/test W/System.err: at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
6188-6188/test W/System.err: at java.net.Socket.startupSocket(Socket.java:592)
6188-6188/test W/System.err: at java.net.Socket.<init>(Socket.java:226)
6188-6188/test W/System.err: at test.FullscreenActivity$ClientThread.run(FullscreenActivity.java:363)
6188-6188/test W/System.err: at test(FullscreenActivity.java:340)
6188-6188/test W/System.err: at java.lang.reflect.Method.invoke(Native Method)
6188-6188/test W/System.err: at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(test:270)
6188-6188/test W/System.err: at android.view.View.performClick(View.java:5198)
6188-6188/test W/System.err: at android.view.View$PerformClick.run(View.java:21147)
6188-6188/test W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
6188-6188/test W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
6188-6188/test W/System.err: at android.os.Looper.loop(Looper.java:148)
6188-6188/test W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
6188-6188/test W/System.err: at java.lang.reflect.Method.invoke(Native Method)
6188-6188/test W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
6188-6188/test W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
As far as I can tell, this should function as expected. It seems to think the Runnable isn't a thread, but I can't figure out why.
You need a Thread to run your Runnable for you. Simply calling run on a Runnable does not run it on a different thread.
new Thread(new ClientThread(SERVER_IP_loc, SERVERPORT_loc)).start();