Reputation: 71
I'm getting an error in my logcat stating:
java.net.UnknownHostException: apps.example.com
09-13 14:57:28.970: W/System.err(3823): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Has anyone seen this before? I'm not sure exactly what's causing the issue.
FULL LOGCAT:
09-13 14:57:27.085: D/dalvikvm(3823): GC_EXTERNAL_ALLOC freed 46K, 43% free 3084K/5379K, external 0K/0K, paused 77ms
09-13 14:57:27.165: D/dalvikvm(3823): GC_EXTERNAL_ALLOC freed 1K, 43% free 3084K/5379K, external 1K/513K, paused 71ms
09-13 14:57:27.285: D/dalvikvm(3823): GC_EXTERNAL_ALLOC freed 5K, 43% free 3091K/5379K, external 2167K/2538K, paused 64ms
09-13 14:57:27.290: I/System.out(3823): Sim State5
09-13 14:57:27.300: D/Network Availability(3823): CONNECTED
09-13 14:57:27.300: D/Network Availability(3823): NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
09-13 14:57:27.375: D/CLIPBOARD(3823): Hide Clipboard dialog at Starting input: finished by someone else... !
09-13 14:57:28.765: D/MDN(3823): 3055861092
09-13 14:57:28.770: I/System.out(3823): MDN%1234 = 768
09-13 14:57:28.770: I/System.out(3823): MDN/1234 = 2476386
09-13 14:57:28.770: D/ICCID(3823): 8901260832120867967
09-13 14:57:28.770: I/System.out(3823): ICCID%1234 = 587
09-13 14:57:28.770: I/System.out(3823): ICCID/1234 = 7213339410146570
09-13 14:57:28.815: D/dalvikvm(3823): GC_EXTERNAL_ALLOC freed 20K, 42% free 3129K/5379K, external 2664K/3205K, paused 38ms
09-13 14:57:28.855: I/url...(3823): https://apps.example.com/REST/phoneSettings
09-13 14:57:28.885: V/httpPost(3823): org.apache.http.client.methods.HttpPost@40538058
09-13 14:57:28.970: E/DataSettings(3823): java.net.UnknownHostException: apps.example.com
09-13 14:57:28.970: W/System.err(3823): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
09-13 14:57:28.970: W/System.err(3823): at android.view.ViewRoot.checkThread(ViewRoot.java:3088)
09-13 14:57:28.970: W/System.err(3823): at android.view.ViewRoot.requestLayout(ViewRoot.java:669)
09-13 14:57:28.970: W/System.err(3823): at android.view.View.requestLayout(View.java:8406)
09-13 14:57:28.980: W/System.err(3823): at android.view.View.requestLayout(View.java:8406)
09-13 14:57:28.980: W/System.err(3823): at android.view.ViewGroup.removeAllViews(ViewGroup.java:2261)
09-13 14:57:28.980: W/System.err(3823): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:213)
09-13 14:57:28.980: W/System.err(3823): at android.app.Activity.setContentView(Activity.java:1663)
09-13 14:57:28.980: W/System.err(3823): at com.project.example.app.UpdateActivity.tryagain(UpdateActivity.java:654)
09-13 14:57:28.980: W/System.err(3823): at com.project.example.app.UpdateActivity$NetworkTask.getQueryResults(UpdateActivity.java:569)
09-13 14:57:28.980: W/System.err(3823): at com.project.example.app.UpdateActivity$NetworkTask.doInBackground(UpdateActivity.java:382)
09-13 14:57:28.980: W/System.err(3823): at com.project.example.app.UpdateActivity$NetworkTask.doInBackground(UpdateActivity.java:1)
09-13 14:57:28.980: W/System.err(3823): at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-13 14:57:28.980: W/System.err(3823): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
09-13 14:57:28.980: W/System.err(3823): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
09-13 14:57:28.980: W/System.err(3823): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
09-13 14:57:28.980: W/System.err(3823): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
09-13 14:57:28.980: W/System.err(3823): at java.lang.Thread.run(Thread.java:1019)
09-13 14:57:34.089: V/In the parser(3823): now
09-13 14:57:34.089: W/System.err(3823): org.xml.sax.SAXException: No input specified.
09-13 14:57:34.100: W/System.err(3823): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:285)
09-13 14:57:34.100: W/System.err(3823): at com.project.example.app.XmlParserHandlerFinal.getQueryResponse(XmlParserHandlerFinal.java:170)
09-13 14:57:34.100: W/System.err(3823): at com.project.example.app.UpdateActivity$NetworkTask.success(UpdateActivity.java:598)
09-13 14:57:34.105: W/System.err(3823): at com.project.example.app.UpdateActivity$NetworkTask.onPostExecute(UpdateActivity.java:590)
09-13 14:57:34.105: W/System.err(3823): at com.project.example.app.UpdateActivity$NetworkTask.onPostExecute(UpdateActivity.java:1)
09-13 14:57:34.105: W/System.err(3823): at android.os.AsyncTask.finish(AsyncTask.java:417)
09-13 14:57:34.105: W/System.err(3823): at android.os.AsyncTask.access$300(AsyncTask.java:127)
09-13 14:57:34.105: W/System.err(3823): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
09-13 14:57:34.105: W/System.err(3823): at android.os.Handler.dispatchMessage(Handler.java:99)
09-13 14:57:34.105: W/System.err(3823): at android.os.Looper.loop(Looper.java:130)
09-13 14:57:34.105: W/System.err(3823): at android.app.ActivityThread.main(ActivityThread.java:3691)
09-13 14:57:34.105: W/System.err(3823): at java.lang.reflect.Method.invokeNative(Native Method)
09-13 14:57:34.105: W/System.err(3823): at java.lang.reflect.Method.invoke(Method.java:507)
09-13 14:57:34.105: W/System.err(3823): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
09-13 14:57:34.105: W/System.err(3823): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
09-13 14:57:34.105: W/System.err(3823): at dalvik.system.NativeStart.main(Native Method)
09-13 14:57:34.174: I/dalvikvm(3823): Failed resolving Lcom/project/example/app/NotificationActivityForMultiProf; interface 26 'Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;'
09-13 14:57:34.174: W/dalvikvm(3823): Link of class 'Lcom/project/example/app/NotificationActivityForMultiProf;' failed
09-13 14:57:34.174: E/dalvikvm(3823): Could not find class 'com.project.example.app.NotificationActivityForMultiProf', referenced from method com.project.example.app.ConfigFinalActivity.showNotification
09-13 14:57:34.174: W/dalvikvm(3823): VFY: unable to resolve const-class 561 (Lcom/project/example/app/NotificationActivityForMultiProf;) in Lcom/project/example/app/ConfigFinalActivity;
09-13 14:57:34.174: D/dalvikvm(3823): VFY: replacing opcode 0x1c at 0x004b
09-13 14:57:34.174: D/dalvikvm(3823): VFY: dead code 0x004d-007f in Lcom/project/example/app/ConfigFinalActivity;.showNotification ()V
09-13 14:57:36.494: W/KeyCharacterMap(3823): No keyboard for id 0
09-13 14:57:36.494: W/KeyCharacterMap(3823): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
09-13 14:57:36.785: D/CLIPBOARD(3823): Hide Clipboard dialog at Starting input: finished by someone else... !
SOURCE:
// AsyncTask to call web service
public class NetworkTask extends AsyncTask<String, Integer, InputStream> {
@Override
protected void onPreExecute() {
super.onPreExecute();
//
}
@Override
protected InputStream doInBackground(String... params) {
int result = 0;
{
Log.i("url...", Base_URL);
try {
stream = getQueryResults(Base_URL);
} catch (SocketTimeoutException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SSLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SAXException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// The code below plays a ST Promo animation
// prior to displaying update success or failure message
for (int incr = 0; incr < 2; incr++) {
// Sleep for 1/2 second
// Invoke UI to change updating text to show 1 dot
// And Increasing the level to reduce the amount of clipping
// and
// slowly reveals the hand image
publishProgress(R.drawable.loading_full,
R.drawable.loading_empty, R.drawable.loading_empty,
R.drawable.loading_empty, R.drawable.loading_empty);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
}
publishProgress(R.drawable.loading_full,
R.drawable.loading_full, R.drawable.loading_empty,
R.drawable.loading_empty, R.drawable.loading_empty);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
}
publishProgress(R.drawable.loading_full,
R.drawable.loading_full, R.drawable.loading_full,
R.drawable.loading_empty, R.drawable.loading_empty);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
}
publishProgress(R.drawable.loading_full,
R.drawable.loading_full, R.drawable.loading_full,
R.drawable.loading_full, R.drawable.loading_empty);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
}
publishProgress(R.drawable.loading_full,
R.drawable.loading_full, R.drawable.loading_full,
R.drawable.loading_full, R.drawable.loading_full);
// Sleep for 1/2 second
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
}
}
return stream;
}
}
/*
* Sends a query to server and gets back the parsed results in a bundle
* urlQueryString - URL for calling the webservice
*/
protected synchronized InputStream getQueryResults(String urlQueryString)
throws IOException, SAXException, SSLException,
SocketTimeoutException, Exception {
try {
// HttpsURLConnection https = null;
String uri = urlQueryString;
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
BasicNameValuePair mdn1, mdn2,id1,id2;
if (MDN.equals("")) {
mdn1 = new BasicNameValuePair("mdn1", null);
mdn2 = new BasicNameValuePair("mdn2", null);
} else {
mdn1 = new BasicNameValuePair("mdn1", mdN1.toString());
mdn2 = new BasicNameValuePair("mdn2", mdN2.toString());
}
BasicNameValuePair car = new BasicNameValuePair("car", caR);
if (ICCID.equals("")) {
id1 = new BasicNameValuePair("id1", null);
id2 = new BasicNameValuePair("id2", null);
} else {
id1 = new BasicNameValuePair("id1",
iD1.toString());
id2 = new BasicNameValuePair("id2",
iD2.toString());
}
nameValuePairs.add(mdn1);
nameValuePairs.add(mdn2);
nameValuePairs.add(car);
nameValuePairs.add(id1);
nameValuePairs.add(id2);
UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(
nameValuePairs, "ISO-8859-1");
KeyStore trustStore = KeyStore.getInstance(KeyStore
.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory
.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443));
ClientConnectionManager ccm = new ThreadSafeClientConnManager(
params, registry);
HttpClient httpClient = new DefaultHttpClient(ccm, params);
params = httpClient.getParams();
HttpClientParams.setRedirecting(params, true);
HttpPost httpPost = new HttpPost(uri);
httpPost.addHeader("Authorization",
getB64Auth("nmundru", "abc123"));
httpPost.setHeader("Content-Type", "text/plain; charset=utf-8");
Log.v("httpPost", httpPost.toString());
httpPost.setEntity(urlEncodedFormEntity);
HttpResponse httpResponse = httpClient.execute(httpPost);
System.out.println("response...." + httpResponse.toString());
Log.v("response...", httpResponse.toString());
stream = httpResponse.getEntity().getContent();
// save the InputStream in a file
try {
FileOutputStream fOut = openFileOutput("settings.xml",
Context.MODE_WORLD_READABLE);
DataInputStream in = new DataInputStream(stream);
BufferedReader br = new BufferedReader(
new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
System.out.println(strLine); //to print the response
// in logcat
fOut.write(strLine.getBytes());
}
fOut.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
fis = openFileInput("settings.xml");
} catch (Exception e) {
Log.e(LOG_TAG, e.toString());
tryagain();
} finally {
// https.disconnect();
}
return stream;
}
private String getB64Auth(String login, String pass) {
String source = login + ":" + pass;
String ret = "Basic "
+ Base64.encodeToString(source.getBytes(), Base64.URL_SAFE
| Base64.NO_WRAP);
return ret;
}
@Override
protected void onPostExecute(InputStream stream) {
super.onPostExecute(stream);
// This method is called to parse the response and save the
// ArrayLists
success();
}
public void success() {
// to parse the response
try {
handler.getQueryResponse(fis);
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// set method to save the ArryaLists from the parser
setArrayList();
Intent i = new Intent(UpdateActivity.this, ConfigFinalActivity.class);
startActivity(i);
finish();
}
// Framework UI thread method corresponding to publishProgress call in
// worker thread
protected void onProgressUpdate(Integer... progress) {
// Call function to update image view
setProgressImgView(progress[0], progress[1], progress[2],
progress[3], progress[4]);
}
}
private void setProgressImgView(Integer imgViewId1, Integer imgViewId2,
Integer imgViewId3, Integer imgViewId4, Integer imgViewId5) {
// update image view with the updating dots
// Reset view layout in case orientation while updating
setContentView(R.layout.updating);
mProgressImageview1 = (ImageView) findViewById(R.id.loading_empty1);
mProgressImageview2 = (ImageView) findViewById(R.id.loading_empty2);
mProgressImageview3 = (ImageView) findViewById(R.id.loading_empty3);
mProgressImageview4 = (ImageView) findViewById(R.id.loading_empty4);
mProgressImageview5 = (ImageView) findViewById(R.id.loading_empty5);
mProgressImageview1.setImageResource(imgViewId1);
mProgressImageview2.setImageResource(imgViewId2);
mProgressImageview3.setImageResource(imgViewId3);
mProgressImageview4.setImageResource(imgViewId4);
mProgressImageview5.setImageResource(imgViewId5);
}
@Override
protected void onRestart() {
super.onRestart();
if (mErrorAlert != null)
mErrorAlert.dismiss();
}
public void tryagain() {
// Displaying final layout after failure of pre-ICS automatic settings
// update
setContentView(R.layout.tryagain);
String tryAgainText = "";
CharSequence styledTryAgainText;
tryAgainText = String.format(getString(R.string.tryagain_text1),
TotalSteps);
styledTryAgainText = Html.fromHtml(tryAgainText);
TextView tryAgain1 = (TextView) findViewById(R.id.tryagain_text1);
tryAgain1.setText(styledTryAgainText);
tryAgainText = String.format(getString(R.string.tryagain_text2),
TotalSteps);
styledTryAgainText = Html.fromHtml(tryAgainText);
TextView tryAgain2 = (TextView) findViewById(R.id.tryagain_text2);
tryAgain2.setText(styledTryAgainText);
tryAgainText = String.format(getString(R.string.tryagain_text3),
TotalSteps);
styledTryAgainText = Html.fromHtml(tryAgainText);
TextView tryAgain3 = (TextView) findViewById(R.id.tryagain_text3);
tryAgain3.setText(styledTryAgainText);
}
private void assistUpdate() {
// Displaying final layout after pre-ICS automatic settings update
setContentView(R.layout.assist_update);
assist_update_btn = (Button) findViewById(R.id.assist_update_btn);
assist_update_btn.setOnClickListener((OnClickListener) this);
}
public void success() {
// to parse the response
try {
handler.getQueryResponse(fis);
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// set method to save the ArryaLists from the parser
setArrayList();
Intent i = new Intent(this, ConfigFinalActivity.class);
startActivity(i);
finish();
}
public String getResult() {
return result;
}
}
Upvotes: 0
Views: 1566
Reputation: 133560
In
protected InputStream doInBackground(String... params)
You have
stream = getQueryResults(Base_URL);
Then In getQueryResults
you have
catch (Exception e) {
Log.e(LOG_TAG, e.toString());
tryagain();
}
The In tryagain
you have
public void tryagain() {
setContentView(R.layout.tryagain);
You cannot update/access ui from a background thread. That is why you are getting that exception.
Also you should re consider your design. If you have setContentView
more than once in the same activity re consider your design.
Also instead of mutiple try blocks have one try block and multiple catch blocks.
Not sure what you want but you are calling publishProgress
more than once.
Upvotes: 2
Reputation: 44571
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Looks like you are trying to update the UI
on a background Thread
like in doInBackground()
of your AsyncTask
. You can't do this. You need to update the UI
on a UI Thread
. Use any of the other AsyncTask
methods to do this such as
onPreExecute()
onProgressUpdate()
or
onPostExecute()
you may also want to see
Upvotes: 1
Reputation: 13233
You are trying to update an UI element from a Thread
that is not the UI Thread
.
Upvotes: 0