2013-05-07 52 views
0

我开发了聊天应用程序。要在聊天中传输图片,我们首先将其上传到内容模块,然后将该ID分享给接收者。如果出现问题,我们会调用messagelistner中的getFile。但是,将相同的代码放在该方法之外可以正常工作请各位看看下面的代码:Android QuickBlox getFile响应问题


MyChatController.java


private MessageListener messageListener = new MessageListener() { 
    @Override 
    public void processMessage(Chat chat, Message message) { 
      System.out.println(String.format(">>> Message received (from=%s, to=%s): %s",from, to, message.getBody())); 

     if (onMessageReceivedListener != null) 
     { 
      onMessageReceivedListener.onMessageReceived(message); 
     } 
    } 
    }; 

的这种方法实现在ChatActivity

ChatActivity.java

 

private ChatController.OnMessageReceivedListener onMessageReceivedListener = new ChatController.OnMessageReceivedListener() 
{ 

     public void onMessageReceived(final Message message) 
     { 
      final String from = message.getFrom().split("-")[0]; 
      final String messageString = message.getBody(); 
      Log.v("----msg from----","from ap "+ from+"-----"+friend.getId().toString()); 
      if(from.equalsIgnoreCase(friend.getId().toString())) 
      { 

       if(messageString.startsWith(">>In thread"); 
            URL url = new URL(imageUrl); 
            Log.v("---CONNECTION url---","In thread---"+url); 
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
            urlConnection.setRequestMethod("GET"); 
            urlConnection.connect();     
            String fileDir=null; 
            File file=null; 
            File ffile; 
            if(fileType==SELECT_IMAGE) 
            { 
             fileDir=SDCardRoot+"/Globr/Images"; 
            }  
            ffile=new File(fileDir); 
            if(!ffile.exists()) 
            { 
             ffile.mkdirs(); 
            }   
            file = new File(fileDir,filename); 
            Log.v("---folder file name---","image folder fil created---"+filename); 
            if(!file.exists()) 
            { 
             file.createNewFile(); 
            } 


            FileOutputStream fileOutput = new FileOutputStream(file); 
            InputStream inputStream = urlConnection.getInputStream(); 
            int totalSize = urlConnection.getContentLength(); 
            int downloadedSize = 0; 
            byte[] buffer = new byte[1024]; 
            int bufferLength = 0; 
            while ((bufferLength = inputStream.read(buffer)) > 0) 
            {    
             fileOutput.write(buffer, 0, bufferLength);     
             downloadedSize += bufferLength;    
             Log.v("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ; 
            }   
            fileOutput.close(); 
            Log.v("File:-------","file is : "+file); 
            if(downloadedSize==totalSize) filepath=file.getAbsolutePath(); 
           } 
           catch (MalformedURLException e) 
           { 
            e.printStackTrace(); 
           } 
           catch (IOException e) 
           { 
            filepath=null; 
            e.printStackTrace(); 
           } 
          } 
         }.start(); 

        } 

        @Override 
        public void onComplete(Result result, Object o) { 
        } 
       }); 
      } 
     } 
    } 

日志:

04-19 18:02:26.163: I/System.out(25108): >>> Message received (from=110918, to=115738): <file_image 40418 

04-19 18:02:26.193: V/--------IMAge--------(25108): --ID 40418--lenth--5---40418 

04-19 18:02:26.193: D/QBASDK RestRequest(25108): 

========================================================= 

04-19 18:02:26.193: D/QBASDK RestRequest(25108): === REQUEST ==== 09a23d0f-5fa9-4306-94e8-9ebc8c44c9ec === 

04-19 18:02:26.193: D/QBASDK RestRequest(25108): REQUEST 

04-19 18:02:26.193: D/QBASDK RestRequest(25108):  GET https://api.quickblox.com/blobs/40418.json 

04-19 18:02:26.193: D/QBASDK RestRequest(25108): HEADERS 

04-19 18:02:26.193: D/QBASDK RestRequest(25108): QuickBlox-REST-API-Version=0.1.1 

04-19 18:02:26.193: D/QBASDK RestRequest(25108): QB-SDK=Android 0.8.1 

04-19 18:02:26.193: D/QBASDK RestRequest(25108): QB-Token=9c0e70b1c1b2a31bb497f6672e72563fa570d492 

04-19 18:02:26.193: D/QBASDK RestRequest(25108):PARAMETERS 

04-19 18:02:26.193: D/QBASDK RestRequest(25108):INLINE 

04-19 18:02:26.193: D/QBASDK RestRequest(25108):GET https://api.quickblox.com/blobs/40418.json 

04-19 18:02:37.304: D/SMACK(25108): 06:02:37 PM SENT (1118266312): 

04-19 18:02:43.050: D/GestureDetector(25108): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 5 mFalseSizeCnt:0 

04-19 18:03:03.360: D/GestureDetector(25108): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 5 mFalseSizeCnt:0 

04-19 18:03:07.304: D/SMACK(25108): 06:03:07 PM SENT (1118266312): 

我们无法得到回复。

回答

2

onMessageReceived方法可以调用非主线程或类似这样的

试试打电话给你的代码在主线程,而不是

+0

感谢,把这个在** ** runOnUIthread工作作为其活动但是当我通过**服务**请求相同时,我无法得到回应。你能否指导如何在服务中调用** getFile()**和** getUser()**方法。 – Reshma 2013-05-10 09:45:18