Android で ppt ファイル変換を実装しており、REST などの Web サービスを使用しています。しかし、私のコードはメイン スレッドで実行されるため、AsynchTask には do-In-Background() を使用する必要があります。
アプリケーションを実行すると、次のようなエラー/警告が表示されます。
View Root CalledFromWrongThreadException ビュー階層を作成した元のスレッドのみ
do-In-Background() がないと正常に実行されますが、実行ステータス中に戻るボタンを押すとアプリケーションがクラッシュします。これが私のコードです。
btnSubmit.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
convertToImage();
}
});
protected void onActivityResult
(int requestCode, int resultCode, Intent data)
{
// TODO Auto-generated method stub
if (requestCode == PATH)
{
if (resultCode == RESULT_OK)
{
if (data != null)
{
path = data.getStringExtra("path");
System.out.println("Path : " + path );
String strfpath = path ;
String fileName2
=strfpath.substring(strfpath.lastIndexOf("/")+1);
System.out.println("fileName2 :" + fileName2 );
function_arg1.setText(fileName2);
}
}
}
}
ここに私の doInBackground() メソッドがあります
private void convertToImage()
{
httpGetAsynchTask httpGetAsyncTask = new httpGetAsynchTask();
httpGetAsyncTask.execute();
}
class httpGetAsynchTask extends AsyncTask<String , Integer , String>
{
protected void onPreExecute() {
try{
dialog.setMessage("Please Wait");
dialog.show();
}
catch(Exception e)
{
}
}
@Override
protected String doInBackground(String... arg0)
{
// TODO Auto-generated method stub
if (function_arg1.getText().length() == 0)
{
AlertDialog.Builder dialog = new AlertDialog.Builder(StorageFolderUploadFile.this);
dialog.setTitle("Error");
dialog.setMessage("Please Enter Require Fields");
dialog.setNeutralButton("Ok", null);
dialog.show();
}
else
{
fileName = function_arg1.getText().toString();
System.out.println("File Name :- " + fileName);
folderName="tazeen";
Folder obj = new Folder();
try
{
response = obj.uploadFile(path/*, folderName*/);
Log.e("",""+response);
if (response)
{
result.append("File Uploaded Successfully \n");
Document docObj=new Document( fileName /*folderName*/);
count = docObj.getSlideCount();
if (count > 0)
{
result.append(" \n Numbers Of Slides = " + count);
System.out.println("Number Of Slides " + count );
for(int i=1; i <= count ; i++)
{
System.out.println("________________________________________");
System.out.println("i :-> " + i );
String outputPath = fileName + "_Tazeen" + i + ".jpg" ;
System.out.println("outputPath :-> " + outputPath);
slideNumber = i;
System.out.println("slideNumber :-> " + slideNumber);
Document docObj2=new Document(fileName);
System.out.println("docObj2 :-> " + docObj2);
docObj2.saveSlideAs(outputPath.toString().trim(), slideNumber, imageFormat);
System.out.println("docObj2 :-> " + docObj2);
result.append("slide is converted and save to your sdcard \n");
String imagePath = path + "/" + outputPath ;
System.out.println("imagePath : " + imagePath );
}
}
}
else
{
result.append("Oops..Something went wrong");
}
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return fileName;
}
@Override
public void onPostExecute(String values)
{
convertToImage();
try
{
if(dialog.isShowing())
{
dialog.dismiss();
}
}
catch(Exception e)
{}
}
}